Помогите с системой комментариев багтрек django, используя ModelForm
Я пытаюсь добавить компонент комментариев в приложение отслеживания ошибок, используя django. У меня есть текстовое поле для комментариев и поле by - автоматически распространяется по идентификатору пользователя.
Я хочу, чтобы текстовое поле комментариев стало доступно только для чтения после сохранения комментария. Я пытался сделать это несколькими способами. Наилучший способ, который я до сих пор придумал, - это передать мою модель Comment в ModelForm, а затем использовать атрибуты виджета формы, чтобы преобразовать мое поле только для чтения.
models.py
class CommentForm(ModelForm):
class Meta:
model = Comment
exclude = ('ticket', 'submitted_date', 'modified_date')
def __init__(self, *args, **kwargs):
super(CommentForm, self).__init__(*args, **kwargs)
instance = getattr(self, 'instance', None)
if instance and instance.id:
self.fields['comments'].widget.attrs['readonly'] = True
class Comment(models.Model):
ticket = models.ForeignKey(Ticket)
by = models.ForeignKey(User, null=True, blank=True, related_name="by")
comments = models.TextField(null=True, blank=True)
submitted_date = models.DateField(auto_now_add=True)
modified_date = models.DateField(auto_now=True)
class Admin:
list_display = ('comments', 'by',
'submitted_date', 'modified_date')
list_filter = ('submitted_date', 'by',)
search_fields = ('comments', 'by',)
Модель My Comment связана с моей моделью Ticket в программе отслеживания ошибок. Я связываю комментарии к тикетам, помещая комментарии в inline в admin.py. Теперь возникает проблема: как передать ModelForm в TabularInline? TabularInline требует определенной модели. Однако после того, как я принял модель в моем рядном, передавая форма модели становится спорной.
admin.py
class CommentInline(admin.TabularInline):
model = Comment
form = CommentForm()
search_fields = ['by', ]
list_filter = ['by', ]
fields = ('comments', 'by')
readonly_fields=('by',)
extra = 1
Кто-нибудь знает, как передать ModelForm в TabularInline, не имея полей обычной модели переопределить ModelForm? Заранее спасибо!
1 ответ
Не создавайте экземпляр формы в подклассе TabularInline:
form = CommentForm