多対多の関係のアイテムのリストを照会する際に問題があります。私が照会しようとしているモデルは以下の通りです。これは、労働者が「開口部」を選択し、多くの労働者が同じ「開口部」を選択できるモデルである。私は「開口部」を選択した労働者のリストを選択しようとしていますが、成功していません。Django manytomany照会なしおよび/または不合格表示
class FavOpening(models.Model):
opening = models.OneToOneField(Openings, blank=True, default=None)
worker = models.ManyToManyField(Worker, blank=True, default=None)
def __unicode__(self):
return str(self.opening)
Iが選択された作業者(ID-31)に基づいて、開口の種類については、以下にこれを試み、それが動作し、作業者が選択した開口部が印刷されるので、それは非常に奇妙です。
employee = get_object_or_404(Worker, id=31)
print employee.favopening_set.all()
しかし、私は以下のようにmanytomany内で作業者を取得するためにそれ以外の方法でラウンドを行うと、動作しません。 Workers.Workerを示す -
openingobj = get_object_or_404(Openings, id=1)
print openingobj.favopening_set.all()
は、私はまた、開口部(ID = 1)に基づいて労働者のリストを取得するには、以下を実行しようとしましたが、私は何の結果を得ていないのです、それは属性「favopening_set」を持っていないと言います。最後に、私は取得するには、プリフェッチを使用すると言ういくつかの研究に基づいて以下にこれを試してみました、私は[次の開口部を選択した少なくとも1つのワーカーを持っているので、真されていません。(私は管理者に確認)
openingobj = get_object_or_404(Openings, id=1)
print openingobj.favopening.worker
なし、物事のセット - What's the difference between select_related and prefetch_related in Django ORM?が、開口部のインスタンスを介してマネージャにアクセスすることはできません。
openingobj = get_object_or_404(Openings, id=1)
openingobj.objects.prefetch_related('favopening_set').all()
私はこれをどのように行うことができますか有用なアドバイスをありがとう。
私はなぜあなたが 'favopening_set'を使用しようとしたのか分かりません。それは1対1の関係です。セットではありません。正しいアクセサは、次のスニペットで正しく使用された 'favopening'です。 –
こんにちはダニエル、私はあなたがアドバイスしたように私が好きな人がいるときに、オープニングを取得しています。私は、このオープニングを選んだ労働者のリストを得るためにマネージャーが必要なので、オブジェクトを好きにしてみようとしましたが、 "FavOpeningインスタンスを介してマネージャーにアクセスできない"というエラーが出ています。 dir(openingobj.favopening)は、オブジェクトが使用できる属性のリストの中にあることを示します。 – user3655574