我有以下型号:
class Article(models.Model):
title = models.CharField()
description = models.TextField()
author = models.ForeignKey(User)
class Rating(models.Model):
value = models.IntegerField(choices=RATING_CHOICES)
additional_note = models.TextField(null=True, blank=True)
from_user = models.ForeignKey(User, related_name='from_user')
to_user = models.ForeignKey(User, related_name='to_user')
rated_article = models.ForeignKey(Article, null=True, blank=True)
dtobject = models.DateTimeField(auto_now_add=True)
基于上述模型,我创建了一个模型表单,如下所示:
模型表格:
class RatingForm(ModelForm):
class Meta:
model = Rating
exclude = ('from_user', 'dtobject')
排除from_user
,因为request.user
是from_user
。
表单呈现得很好,但在下拉字段的to_user
中,作者也可以评价自己。所以我希望current_user的名字填充在下拉字段中。我该怎么做?
答案 0 :(得分:8)
覆盖__init__
以从to_user
选项中删除当前用户。
更新:更多解释
ForeignKey使用ModelChoiceField
,其选择是queryset。因此,在__init__
中,您必须从to_user
的查询集中删除当前用户。
更新2:示例
class RatingForm(ModelForm):
def __init__(self, current_user, *args, **kwargs):
super(RatingForm, self).__init__(*args, **kwargs)
self.fields['to_user'].queryset = self.fields['to_user'].queryset.exclude(id=current_user.id)
class Meta:
model = Rating
exclude = ('from_user', 'dtobject')
现在,您可以在视图中创建RatingForm
对象传递request.user
作为关键字参数current_user
,如下所示。
form = RatingForm(current_user=request.user)