31

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

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

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

ModelFormforを作成したいのですが、現在のユーザーが働いている工場だけでリストを構成しBikeたいと考えています。made_atアイデアは、ユーザーが組み立てた自転車を追加し、その自転車がどの工場で製造されたかを入力できるようにすることです。

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

4

3 に答える 3

46

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

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

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

于 2009-11-30T18:42:40.023 に答える
13

あなたの質問はこれのだまされているかもしれません。

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

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

于 2009-11-30T18:46:31.747 に答える