Django ModelForm实例,具有特定字段的自定义查询集

Den*_*gan 25 django django-forms modelform

我的模型与以下内容不同:

class Bike(models.Model):
    made_at = models.ForeignKey(Factory)
    added_on = models.DateField(auto_add_now=True)
Run Code Online (Sandbox Code Playgroud)

所有用户都可以在多家工厂工作,因此,他们的用户配置文件都有一个ManyToManyFieldFactory.

现在我想构建一个ModelFormfor,Bike但我希望made_at列表只包含当前用户工作的工厂.这个想法是,用户应该能够添加他们组装好的自行车并进入自行车所在的工厂.

我怎么做?

Dav*_*ave 41

在视图中尝试这样的东西

form  = BikeForm()
form.fields["made_at"].queryset = Factory.objects.filter(user__factory)
Run Code Online (Sandbox Code Playgroud)

修改Factory查询集,以便识别用户工作的工厂.


cet*_*eek 9

你的问题可能是一个骗局.

S. Lott回答是解决问题的机票.他回答说:

ForeignKey由django.forms.ModelChoiceField表示,它是ChoiceField,其选择是模型QuerySet.请参阅ModelChoiceField的参考.

因此,为字段的queryset属性提供QuerySet.取决于您的表单是如何构建的.如果您构建一个显式表单,您将拥有直接命名的字段.

form.rate.queryset = Rate.objects.filter(company_id=the_company.id) 如果采用默认的ModelForm对象, form.fields["rate"].queryset = ...

这在视图中明确完成.没有黑客攻击.