簡體   English   中英

Django Deliciouspie通用關系

[英]Django Tastypie Generic Relation

我在Django項目中有一些類似的模型:

class Link(BaseModel, BeginEndModel):
    entity0_content_type = models.ForeignKey(ContentType, related_name='link_from')
    entity0_object_id = models.PositiveIntegerField()
    entity0_content_object = generic.GenericForeignKey('entity0_content_type', 'entity0_object_id')

    entity1_content_type = models.ForeignKey(ContentType, related_name='link_to')
    entity1_object_id = models.PositiveIntegerField()
    entity1_content_object = generic.GenericForeignKey('entity1_content_type', 'entity1_object_id')

    link_type = models.ForeignKey(LinkType)

class Work(BaseModel, SluggedModel):
    """ Eser """
    name = models.CharField(max_length=255)
    links = generic.GenericRelation('Link', content_type_field='entity0_content_type', object_id_field='entity0_object_id')

我想像這樣用Tasypie Api創建一個WorkResource:

from tastypie.resources import ModelResource, ALL, ALL_WITH_RELATIONS
from tastypie import fields, utils
from tastypie.contrib.contenttypes.fields import GenericForeignKeyField
from tastypie.authentication import Authentication, SessionAuthentication
from tastypie.authorization import DjangoAuthorization, Authorization
from models import Link, LinkType, LinkPhrase
from models import Work

....

class WorkResource( BaseModelResource ):
    links = fields.ToManyField('musiclibrary.api.LinkResource', 'links_set')

    class Meta:
        queryset = Work.objects.all()
        always_return_data = True
        filtering = {
            'slug': ALL,
            'name': ['contains', 'exact']
        }

class LinkResource( ModelResource ):
    entity0_content_object = GenericForeignKeyField({
        Work: WorkResource,
        Artist: ArtistResource
    }, 'entity0_content_object')
    entity1_content_object = GenericForeignKeyField({
        Work: WorkResource,
        Artist: ArtistResource
    }, 'entity1_content_object')

    link_type = fields.ForeignKey(LinkTypeResource, 'link_type', full=True, null=True)

    class Meta:
        queryset = Link.objects.all()

當我想查看工作資源的結果時, links屬性始終是一個空數組。 為什么我不能在2種資源之間建立關系?

注意:我使用Django 1.6.5,django-tastypie 0.11.1。 我在上面簡化了我的models.py和api.py示例。 如果需要,我可以分享我的完整代碼。

這有點棘手,因為與ContentTypes有兩種聯系。 我想這會有所幫助:

class WorkResource( BaseModelResource ):
    links = fields.ToManyField('musiclibrary.api.LinkResource', attribute=lambda bundle: Link.objects.filter(entity0_content_type=ContentType.objects.get_for_model(bundle.obj), entity0_object_id=bundle.obj.id))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM