web-dev-qa-db-ja.com

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

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

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

すべてのユーザーは多くの工場で働く可能性があるため、ユーザープロファイルにはすべてManyToManyFieldからFactoryがあります。

ここで、ModelFormに対してBikeを作成したいのですが、made_at現在のユーザーが働いている工場のみで構成されるリスト。アイデアは、ユーザーが組み立てた自転車を追加して、自転車が製造された工場を入力できるようにする必要があるということです。

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

24
Deniz Dogan

あなたの質問は これの重複 かもしれません。

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

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

8
cethegeek

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

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

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

40
Dave

今日では、次を使用する必要があります。

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