私は次のようなモデルを持っています:
class Bike(models.Model):
made_at = models.ForeignKey(Factory)
added_on = models.DateField(auto_add_now=True)
すべてのユーザーは多くの工場で働く可能性があるため、ユーザープロファイルにはすべてManyToManyField
からFactory
があります。
ここで、ModelForm
に対してBike
を作成したいのですが、made_at
現在のユーザーが働いている工場のみで構成されるリスト。アイデアは、ユーザーが組み立てた自転車を追加して、自転車が製造された工場を入力できるようにする必要があるということです。
それ、どうやったら出来るの?
あなたの質問は これの重複 かもしれません。
S。Lott 's answer 問題を解決するためのチケットがあります。彼は答えました:
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 = ...
これは、ビューで明示的に実行されます。ハッキングはありません。
ビューでこのようなものを試してください
form = BikeForm()
form.fields["made_at"].queryset = Factory.objects.filter(user__factory)
factoryクエリセットを変更して、ユーザーが作業しているファクトリを識別します。
今日では、次を使用する必要があります。
form.base_fields['alumno_item'].queryset = AlumnoItem.objects.prefetch_related(
'alumno',
'alumno__estudiante',
'alumno__estudiante__profile',
'item'
)