31

我有一个与以下不同的模型:

class Bike(models.Model):
    made_at = models.ForeignKey(Factory)
    added_on = models.DateField(auto_add_now=True)

所有用户都可能在多家工厂工作,因此他们的用户资料都有一个ManyToManyFieldto Factory

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

我怎么做?

4

3 回答 3

46

在视图中尝试这样的事情

form  = BikeForm()
form.fields["made_at"].queryset = Factory.objects.filter(user__factory)

修改 Factory 查询集,使其识别用户工作的工厂。

于 2009-11-30T18:42:40.023 回答
13

你的问题可能是一个骗子

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

这是在视图中明确完成的。没有黑客攻击。

于 2009-11-30T18:46:31.747 回答
0

现在,您应该使用:

    form.base_fields['alumno_item'].queryset = AlumnoItem.objects.prefetch_related(
        'alumno',
        'alumno__estudiante',
        'alumno__estudiante__profile',
        'item'
    )
于 2018-07-13T19:47:40.890 回答