3

Submission、Contact、SubmissionContactの3つのモデルがあるとします。

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を使用して、これら3つのテーブルすべての読み取り/書き込みを行うことはできますか?(基本的に、アクションを取得して、tastypieのリストと詳細に配置します)

助けてくれてありがとう。

4

1 に答える 1

4

1 つのモデルを別のモデルにネストするか、脱水サイクルを使用して出力に追加のリソースを追加できます。たとえば、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
于 2012-06-27T17:52:23.940 に答える