3

我有以下模型:

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.userfrom_user.

表单呈现良好,但在to_user下拉字段中,作者也可以评价自己。所以我希望 current_user 的名称填充在下拉字段中。我该怎么做?

4

1 回答 1

9

覆盖__init__以从to_user选择中删除当前用户。

更新:更多解释

ForeignKey 使用ModelChoiceField其选择是查询集。因此,__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.usercurrent_user

form = RatingForm(current_user=request.user)
于 2012-11-24T08:06:55.367 回答