tastypie显示原始外键id值

时间:2013-08-14 22:09:15

标签: django tastypie

我正在尽力使用tastypie返回相关记录ID(外键引用)的值。默认情况下,从结果中过滤掉外键。

我有以下型号:

class Category(models.Model):
    """Finance category"""
    class Meta:
        db_table = 'category'
    parent = models.ForeignKey('self')
    name = models.CharField(max_length=32)
    TYPES = (
        ('outcome', 'outcome'),
        ('income', 'income'),
    )
    type = models.CharField(max_length=7,choices=TYPES)
    created_at = models.DateTimeField()
    updated_at = models.DateTimeField()
    created_by = models.ForeignKey(User, db_column='created_by', related_name='createdCategories')
    updated_by = models.ForeignKey(User, db_column='updated_by', related_name='updatedCategories')

我在这里有两个关系。 parent是递归关系(它是一个类别树表)。 created_by是与用户的关系。 API返回以下值:  * ID  * 名称  * created_at  * updated_at  *类型  * resource_uri

如何让tastypie返回parent(_id)或created_by(或只是任何外键)?

以下是我在其他操作系统问题中尝试过的内容:

class IncomeCategoryResource(ModelResource):
    parent_id = models.IntegerField(attribute="parent_id")
    class Meta:
        queryset = Category.objects.filter(type='income')

不幸的是,整个API都失败了:

__init__() got an unexpected keyword argument 'attribute'

我还尝试将attribute kwarg替换为db_column。这个被忽略了。

请帮帮我:)

1 个答案:

答案 0 :(得分:4)

首先,IntegerField出错了。你应该使用tastypie的字段(tastypie.fields),而不是django模型字段(django.db.models)。那么您的资源应该如下所示:

class IncomeCategoryResource(ModelResource):
    parent_id = IntegerField(attribute="parent__id")
    class Meta:
        queryset = Category.objects.filter(type='income')

请注意使用双下划线来访问父级的id字段。