1

DIY アプリケーション (Django 1.5) に取り組んでいますが、障害が発生しました。関連する主なモデルはGuide、、、、Toolです。ガイドは多くのツールとアイテムを持つことができ、ツールまたはアイテムは多くのガイドに属することができます。同じことがステップにも当てはまります。多くのツールとアイテムを持つことができ、ツールやアイテムは多くのステップに属することができます。ガイドには多くのステップがあり、ステップはガイドに属します。ItemStep

多対多のアイテムをガイドする

多対多ツールのガイド

一対多のステップをガイドする

多対多アイテムのステップ

ステップ多対多ツール

通行止め...

ガイド レベルでは、ツールとアイテムのオプションを無制限にしたいと考えています。しかし、ステップ レベルでは、ツールとアイテムのオプションを、それが属するガイドに割り当てられているものに限定したいと考えています。基本的に、ステップを作成/編集するときは、ガイドから使用できるすべてのツールとアイテムのチェックボックスをリストしたいと考えています。ユーザーは、現在のステップに必要なものを選択します。各ステップには、ツールとアイテムのさまざまな組み合わせがあります (したがって、チェックボックスが必要です)。

ModelMultipleChoiceFieldStep の ModelForm クラスのを発見しました。そこでクエリセットを指定できます。 しかし、ガイド モデルのインスタンスにアクセスしてそのツールとアイテムを取得し、適切に選択を作成するにはどうすればよいでしょうか? ビューで行うのと同様のクエリを提供したいと思います...

Guide.objects.get(pk=n).tools.all()
Guide.objects.get(pk=n).items.all()

どうすればそれを達成できModelMultipleChoiceFieldますか?これを明確に説明できたことを願っています。

助けてくれてありがとう。

class Tool(models.Model):
    name = models.CharField(max_length=100)
    ...


class Item(models.Model):
    name = models.CharField(max_length=100)
    ...


class Guide(models.Model):
    models.CharField(max_length=100)
    description = models.CharField(max_length=500)
    tools = models.ManyToManyField(Tool, null=True, blank=True)
    items = models.ManyToManyField(Item, null=True, blank=True)
    ...


class Step(models.Model):
    title = models.CharField(max_length=100)
    body = models.TextField()
    guide = models.ForeignKey(Guide)
    tools = models.ManyToManyField(Tool, null=True, blank=True)
    items = models.ManyToManyField(Item, null=True, blank=True)

編集: 5/2__init__さらに読んだ後、 のメソッド をオーバーライドする必要があるようです。 へModelMultipleChoiceFieldの参照を取得し、 のself.instanceようなクエリを作成できるようにしself.instance.guide.tools.all()ますself.instance.guide.items.all()。そして、 を介してフィールドを作成しますfields['field_name']

私は今仕事をしているので、今夜遅くまでこれを試すことができません. 調査結果を報告します。

4

1 に答える 1