【发布时间】:2013-12-30 22:32:04
【问题描述】:
我正在尝试创建一个通过 ForeingKey 字段(或者更确切地说是字段中引用的对象)过滤对象的函数。我编写了下面包含的函数,它基于 Tastypie Cookbook 的添加搜索功能。该函数确实可以返回对象,但它仅将对象的名称作为字符串返回。
这是调用函数的结果:
{'receipt_items': [<ReceiptItem: Item1>, <ReceiptItem: Item2>, <ReceiptItem: Item3>]}
这是我的资源:
class ReceiptItemResource(ModelResource):
receipt = fields.ToOneField(ReceiptResource, 'receipt', full = True)
class Meta:
queryset = ReceiptItem.objects.all()
serializer = Serializer()
allowed_methods = ['get', 'post', 'put', 'delete']
always_return_data = True
def prepend_urls(self):
return [
url(r'^(?P<resource_name>%s)/filter%s$' % (self._meta.resource_name, trailing_slash()), self.wrap_view('filter_by_receipt'), name = 'filter_by_receipt'),
]
def filter_by_receipt(self, request, **kwargs):
data = self.deserialize(request, request.body, format = request.META.get('CONTENT_TYPE', 'application/json'))
receipt_id = data.get('receipt_id', '')
print receipt_id
receipt = Receipt.objects.get(id = receipt_id)
receipt_items = ReceiptItem.objects.filter(receipt = receipt)
item_list = {
'receipt_items' : receipt_items,
}
print item_list
return self.create_response(request, receipt_items)
#return super(ReceiptItemResource, self).get_object_list(request).filter(receipt = receipt)
def get_object_list(self, request):
user = request.user
member = user.member
owner = member.owner
return super(ReceiptItemResource, self).get_object_list(request).filter(owner = owner)
理想情况下,我希望此函数以 JSON 格式返回完整的对象详细信息。有什么办法可以做到这一点?
我已经研究了 Tastypie 的资源过滤,但是我不相信这会起作用,因为我试图过滤的字段是 ForeignKey。
非常感谢所有帮助,谢谢。
【问题讨论】:
标签: python django api tastypie