我正在尽力使用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
。这个被忽略了。
请帮帮我:)
答案 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字段。