Django tastypie保存反向GenericForeignKeyField

时间:2013-12-26 23:35:07

标签: django tastypie generic-foreign-key

Django Tastypie即使有反向关系也可以保存相关对象。

但Django Tastypie能否保存GenericForeignKeyField的反向关系呢?

我的资源(不完整,但仅限于重要),

class AreaResource(ModelResource):
    tripl3user = fields.ManyToManyField(
        'tripl3sales.api.resources.area.Tripl3UserResource',
        'tripl3user',
        related_name='area',
        full=True
    )

class Tripl3UserResource(ModelResource):
    content_type = fields.ForeignKey(
        'tripl3sales.api.resources.contenttype.ContentTypeResource',
        'content_type'
    )
    content_object = GenericForeignKeyField({
        Area : AreaResource
        }, 'content_object')

我的models.py

class Area(models.Model):
    name = models.CharField(max_length=50, unique=True)
    tripl3user = generic.GenericRelation('Tripl3User')

class Tripl3User(models.Model):
    content_type = models.ForeignKey(ContentType)
    object_id = models.PositiveIntegerField()
    content_object = generic.GenericForeignKey('content_type', 'object_id')

是否可以保存通用外键的反向关系?如果是这样,那该怎么办?数据是什么样的?

1 个答案:

答案 0 :(得分:0)

最后我得到了答案。

在具有content_typeobject_id的资源中,无需声明content_type,因为content_object已足够。对于related_name,我们使用area

而不是content_object

所以,我的 resources.py 应该是,

class AreaResource(ModelResource):
    tripl3user = fields.ManyToManyField(
        'tripl3sales.api.resources.area.Tripl3UserResource',
        'tripl3user',
        related_name='content_object',
        full=True
    )

class Tripl3UserResource(ModelResource):
    content_object = GenericForeignKeyField({
        Area : AreaResource
    }, 'content_object')

希望这会有所帮助。