python - 自动填充字段不适用于表单
问题描述
我有商店应用程序,在这个应用程序中,我有允许我在产品下添加评论的表单,几乎一切正常,但只有当我通过管理面板添加评论时,当我尝试在我的页面中按表单添加评论时,作者列有值=无
就像您在此图像上看到的那样,当我尝试在页面中按表单将评论添加为用户时,尼克列中的字段应该显示添加此评论的用户仅显示“-”但是当我通过管理面板添加评论作为管理员时然后一切正常
模型.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']
解决方案
您的表单应该有一个作者字段,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})
# ...
推荐阅读
- machine-learning - 创建 ML - 是否可以找到检测到的对象的位置?
- html - 在输入文本旁边放置按钮
- python - Python 读取具有 latin-1 补充编码的文件
- java - Android java-grpc 客户端到 python-grpc 服务器
- javascript - 如何通过javascript从javascript文件中获取asp.net元素的ID
- bash - 如何解决警告“使用子shell避免不得不返回”
- flutter - 如何在flutter http、dio或flutter_downloader上调整下载缓冲区大小?
- python - Python - 是否可以在不硬编码类名的情况下从实例方法更新类变量?
- raspberry-pi - Grafana 在尝试配置 InfluxDB 时给出错误消息“服务器错误”
- .net-core - .NET Core 应用程序将 Azure Redis 缓存与负载均衡器结合使用