首页 > 解决方案 > 自动填充字段不适用于表单

问题描述

我有商店应用程序,在这个应用程序中,我有允许我在产品下添加评论的表单,几乎一切正常,但只有当我通过管理面板添加评论时,当我尝试在我的页面中按表单添加评论时,作者列有值=无

在此处输入图像描述

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

模型.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)

管理员.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)

表格.py

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

标签: pythondjango

解决方案


您的表单应该有一个作者字段,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})
    # ...

推荐阅读