2012-06-27 44 views
3

可以說我有三個型號提交,聯繫和SubmissionContact。如何Django的tastypie多發的資源結合起來?

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)

預先感謝任何幫助。

回答

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 
+0

你也許可以通過改變降低了數據庫的開銷'查詢集= Foo.objects.all()'來'查詢集= Foo.objects.select_related( '巴')。所有()' – SpoonMeiser

相關問題