wha*_*atf 3 django django-models django-forms
我有以下型号:
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)
Run Code Online (Sandbox Code Playgroud)
基于以上模型,我创建了一个模型表单,如下所示:
型号表格:
class RatingForm(ModelForm):
class Meta:
model = Rating
exclude = ('from_user', 'dtobject')
Run Code Online (Sandbox Code Playgroud)
排除from_user
因为request.user
是from_user
.
表单呈现得很好,但在to_user
下拉字段中,作者也可以评价自己.所以我希望current_user的名字填充在下拉字段中.我该怎么做?
覆盖__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')
Run Code Online (Sandbox Code Playgroud)
现在在您创建RatingForm
对象的视图中传递request.user
为关键字参数,current_user
如下所示.
form = RatingForm(current_user=request.user)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
7704 次 |
最近记录: |