假设我有三种模式提交,联系和提交联系。
class Submission(models.Model):
title = models.CharField(max_length=255, verbose_name='Title')
...
class Contact(models.Model):
name = models.CharField(max_length=200, verbose_name='Contact Name')
email = models.CharField(max_length=80, verbose_name='Contact Email')
...
class SubmissionContact(models.Model):
submission = models.ForeignKey(Submission)
contact = models.Foreign(Contact, verbose_name='Contact(s)')
我可以使用tastypie使用单个ModelResource读取/写入所有这三个表。 (基本上在tastypie中获取并列出列表和细节上的动作)
提前感谢您的帮助。
答案 0 :(得分:4)
您可以将一个模型嵌套到另一个模型中,或者使用脱水循环为输出添加额外的资源,例如考虑Foo和Bar模型
class FooResource(ModelResource):
class Meta:
queryset = Foo.objects.all()
resource_name = 'foo'
serializer = Serializer(formats=['xml', 'json'])
excludes = ['date_created']
class BarResource(ModelResource):
foo = fields.ForeignKey(FooResource, attribute='foo', full=True, null=True)
class Meta:
queryset = Bar.objects.all()
resource_name = 'bar'
serializer = Serializer(formats=['xml', 'json'])
如果没有关系,你也可以做类似的事情(对于大数据集,这会导致很多数据库开销,你可能不得不重新考虑你的模型定义):
class FooResource(ModelResource):
class Meta:
queryset = Foo.objects.all()
resource_name = 'foo'
serializer = Serializer(formats=['xml', 'json'])
excludes = ['date_created']
def dehydrate(self, bundle):
obj = self.obj_get(id=bundle.data['id'])
bundle.data['bar'] = Bar.objects.get(id=1).name
return bundle