/ 特定のフィールドのカスタムクエリーセットを持つ/ Django ModelFormインスタンス - django、django-forms、modelform

特定のフィールドのカスタムクエリーセットを持つDjango ModelFormインスタンス - django、django-forms、modelform

私は次のように違いないモデルを持っています:

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

すべてのユーザーはいくつかの工場で働いている可能性があるため、すべてのユーザープロファイルには ManyToManyFieldFactory.

今、私は構築したい ModelForm ために Bike しかし私は欲しい made_at 現在のユーザーが勤務している工場のみで構成されるリスト。アイデアは、ユーザーが自分で組み立てた自転車を追加して、どの工場で自転車を製造したのかを入力できるようにすることです。

それ、どうやったら出来るの?

回答:

回答№1は6

あなたは質問かもしれません これのデュープ.

S.ロット"s 回答 あなたの問題を解決するためのチケットがあります。 彼は答えました:

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

これはビュー内で明示的に行われます。ハッキングはありません。


回答№2の38

ビューでこのようなことを試してください

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

ユーザーが作業しているファクトリを識別するようにFactoryクエリセットを変更します。


回答№3の場合は0

今日では、あなたが使用する必要があります:

    form.base_fields["alumno_item"].queryset = AlumnoItem.objects.prefetch_related(
"alumno",
"alumno__estudiante",
"alumno__estudiante__profile",
"item"
)