特定のフィールドのカスタムクエリセットを持つDjango ModelFormインスタンス
-
10-07-2019 - |
質問
私は次のようなモデルを持っています:
class Bike(models.Model):
made_at = models.ForeignKey(Factory)
added_on = models.DateField(auto_add_now=True)
すべてのユーザーは多くの工場で働いている可能性があるため、ユーザープロファイルにはすべて ManyToManyField
から Factory
があります。
今、 Bike
の ModelForm
を作成しますが、 made_at
リストは、現在のユーザーが作業している工場のみで構成されるようにします。アイデアは、ユーザーが組み立てた自転車を追加し、その自転車が製造された工場を入力できるようにすることです。
どうすればいいですか?
解決
あなたの質問はこれの二重。
S. Lott の回答問題を解決するためのチケットがあります。 彼は答えた:
ForeignKeyはdjango.forms.ModelChoiceFieldで表されます。これは、選択肢がモデルQuerySetであるChoiceFieldです。 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'
)