1

これが私のモデルです:

class Brand(models.Model):
    name         = models.CharField(max_length=30)
    order        = models.SmallIntegerField()

class FeatureGroup(models.Model):
    name         = models.CharField(max_length=30)

class Feature(models.Model):
    name         = models.CharField(max_length=30, blank=True)
    order        = models.SmallIntegerField()
    group        = models.ForeignKey(FeatureGroup)

class FeatureDetail(models.Model):
    description         = models.TextField()
    feature             = models.ForeignKey(Feature)

class Phone(models.Model):
    name         = models.CharField(max_length=30)
    brand        = models.ForeignKey(Brand)
    features     = models.ManyToManyField(FeatureDetail)

現在の電話の機能と機能の詳細を取得し、データペアをループしようとしていますが、取得できません。

私はこれを試しましたが、ブランドを取得するためにのみ機能します。

p = get_object_or_404(Phone.objects.select_related('brand', 'feature__featuredetail'), id=id)

そして行うとき:

print p.featuredetail_set.all()

このエラーが発生します:

Django Version: 1.4.3
Exception Type: AttributeError
Exception Value:    
'Phone' object has no attribute 'featuredetail_set'

どうしたの?

4

2 に答える 2

2

のパラメータとしてクラス名を使用することはできませんselect_related。パラメータは、モデルフィールドの文字列である必要があります。

あなたの場合、それは'features__feature'

もう1つの問題は、select_related 多対多の関係をたどることができないことです。そういうわけでprefetch_related来る。

したがって、クエリセットは次のようになります。

Phone.objects.select_related('brand').prefetch_related('features__feature')

prefetch_related追加のクエリを作成し、Pythonで結合することに注意してください。

于 2013-03-03T08:29:39.973 に答える
1

あなたの関係はfeatures、ではなくと呼ばれfeaturedetail_setます。

これは、とは関係がないことに注意してくださいselect_related。この場合は何もしません(とにかく、転送ForeignKeysでのみ機能します)。

于 2013-03-02T22:16:48.730 に答える