我在django中有一个模型,它有一个django用户模型的外键
class Entry(models.Model):
user = models.ForeignKey(User)
和相应的模型表格
class EntryForm(ModelForm)
class Meta:
model = Entry
用户字段使用“选择”小部件。我希望这个小部件只有员工用户。所以我尝试了以下内容。
观点:
form = EntryForm(initial={'user':User.objects.filter(is_staff=True)}
但没有奏效。 “选择”小组件显示所有用户员工和非员工
然后我尝试了这个: form = EntryForm() form.fields ['user']。queryset = User.objects.filter(is_staff = True)
并且工作了。 我想要做的是将选择用户的选项缩小到仅限员工用户,但我希望能够预先选择某个值,例如用户登录(员工用户).e.g
form = EntryForm(initial={'user':request.user}) #pre-select specific user
form.fields['user'].queryset = User.objects.filter(is_staff = True) #only show staff users
但这不起作用。我在这里说,我想初始化其他表单字段,例如日期和其他表单字段,但为了简单起见,我将它们排除在外。
我也尝试使用表单的 init 方法,但不能很好地使用上面的代码
def __init__(self, *args, **kwargs):
pass
给我一个错误(用于测试目的的通过)。
AttributeError
'EntryAddForm' object has no attribute 'fields'
那么有没有办法在表单中初始化一个Select字段,同时在该字段中同时排除或包含某个查询集?
答案 0 :(得分:1)
我想我解决了..我做的是
form = EntryForm()
form.fields['user'].queryset = User.objects.filter(is_staff=True)
form.fields['user'].initial = request.user
并且工作了。我应该将所有形式逻辑放在 init 中吗?
答案 1 :(得分:1)
在黑暗中拍摄一下,但是EntryForm.Meta
类似乎需要fields
属性,如Django docs中所述。
class EntryForm(ModelForm)
class Meta:
model = Entry
fields = ["user"]