Помогите с системой комментариев багтрек django используя ModelForm - PullRequest
0 голосов
/ 22 марта 2011

Я пытаюсь добавить компонент комментариев в приложение отслеживания ошибок, используя 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 Ответ

1 голос
/ 22 марта 2011

Не создавать экземпляр формы в подклассе TabularInline:

    form = CommentForm
...