0

私はモデルを持っています:

class Article(models.Model):
    name = models.CharField(max_length=255)
    symbol = models.CharField(max_length=255, unique=True)

    . . .

    def __unicode__(self):
        return '%s (%s)' % (self.name, self.symbol)


class ArticleRel(models.Model):
    active = models.BooleanField(default=True)
    create = models.DateTimeField(default=datetime.now)
    article = models.ForeignKey(Article)

    . . .

    def __unicode__(self):
        return '%s' % (self.id)

およびリソース:

class ArticleResource(ModelResource):
    owner = fields.ForeignKey(UserResource, 'owner')

    class Meta:
        queryset = Article.objects.all()
        resource_name = 'articles'
        serializer = Serializer()
        authorization = Authorization()
        filtering = {
            'owner': ALL_WITH_RELATIONS,
        }
        always_return_data = True

    def prepend_urls(self):
        return [
            url(r"^(?P<resource_name>%s)/(?P<id>\d+)/$" % self._meta.resource_name, self.wrap_view('dispatch_detail'), name="api_dispatch_detail"),
        ]


class ArticleRelResource(ModelResource):
    article = fields.ForeignKey(ArticleResource, 'article')

    class Meta:
        queryset = ArticleRel.objects.all()
        resource_name = 'article_rels'
        serializer = Serializer()
        authorization = Authorization()
        filtering = {
            'article': ALL_WITH_RELATIONS,
        }
        always_return_data = True

    def prepend_urls(self):
        return [
            url(r"^(?P<resource_name>%s)/(?P<id>\d+)/$" % self._meta.resource_name, self.wrap_view('dispatch_detail'), name="api_dispatch_detail"),
        ]

そして今: 1 つのクエリですべての article_rels を含む記事を取得するために、このリソースを設定する方法は?

4

2 に答える 2

0

質問を理解したかどうかわかりません。article_rels と article の両方を取得したい場合は、外部キー フィールドで full=true を使用できます。

article = fields.ForeignKey(ArticleResource, 'article', full=True)

ドキュメントに記載されているように - http://django-tastypie.readthedocs.org/en/latest/fields.html#full

余分な db クエリのオーバーヘッド時間に注意してください。

于 2013-06-13T04:13:35.013 に答える
0

これは私にとってはうまくいきます:

def dehydrate(self, bundle):
    bundle.data['rels'] = [ar.__dict__ for ar in ArticleRel.objects.filter(article__id=bundle.data['id'])]
    return bundle
于 2013-06-13T21:04:03.190 に答える