自动填充的字段不适用于表单

时间:2019-02-09 04:19:57

标签: python django

我有购物应用程序,在此应用程序中,我具有允许我在产品下添加评论的表格,几乎所有功能都可以正常工作,但只有当我通过管理面板添加评论时,当我尝试在页面中以用户身份添加评论时, ,作者列的值为value = None

enter image description here

就像当我尝试按页面中的表单用户添加评论时,您可以在此图像上看到的那样,然后尼克列中的字段应显示添加此评论的用户仅显示“-”,但是当我添加评论作为管理员时通过管理面板,然后一切正常

models.py:

 class Comment(models.Model):
    STATUS_CHOICES=(('1/5','1'),
                    ('2/5','2'),
                    ('3/5','3'),
                    ('4/5','4'),
                    ('5/5','5'),
        )
    nick=models.ForeignKey(User, editable=False, null=True, blank=True, on_delete=models.CASCADE)
    rate=models.CharField(max_length=3, choices=STATUS_CHOICES, default=None)
    content=models.TextField()
    product=models.ForeignKey(Product, related_name='comments', on_delete=models.CASCADE, default=None)
   published=models.DateTimeField(auto_now_add=True)

    class Meta:
        ordering=('published',)

    def __str__(self):
        return 'Komentarz wstawiony przez {} do produktu {}'.format(self.nick, self.product)

admin.py

class CommentAdmin(admin.ModelAdmin):
    list_display=('nick','rate','product','published')
    list_filter=('rate','published')
    search_fields=('product__name',)
    date_hierarchy='published'
    ordering=('product','rate')

    def save_model(self, request, obj, form, change):
        obj.nick = request.user
        super().save_model(request, obj, form, change)

    def product__name(self, instance):
        return instance.product.name

admin.site.register(Comment, CommentAdmin)

form.py

class CommentForm(ModelForm):
    class Meta:
        model=Comment
        fields=['rate', 'content']

1 个答案:

答案 0 :(得分:2)

您的表单中应该有一个用于作者的字段,如果您不想显示该字段,可以使用HiddenInput小部件。

class CommentForm(ModelForm):    
    class Meta:
        model = Comment
        fields = ['rate', 'content', 'nick']
        widgets = {'nick': forms.HiddenInput()}

然后,在视图中创建表单时,请提供author作为初始值。

def your_view(request):
    # ...
    form = CommentForm(initial={'nick': request.user})
    # ...