2012-09-19 75 views
2

我得到這個錯誤:Tastypie屬性及相關名稱,空屬性錯誤

The object '' has an empty attribute 'posts' and doesn't allow a default or null value. 

我試圖讓一個職位的「票」的數量,並在我的models.py返回它:

class UserPost(models.Model): 
    user = models.OneToOneField(User, related_name='posts') 
    date_created = models.DateTimeField(auto_now_add=True, blank=False) 
    text = models.CharField(max_length=255, blank=True) 

    def get_votes(self): 
     return Vote.objects.filter(object_id = self.id) 

這裏是我的資源:

class ViewPostResource(ModelResource): 
    user = fields.ForeignKey(UserResource,'user',full=True) 
    votes= fields.CharField(attribute='posts__get_votes') 
    class Meta: 
     queryset = UserPost.objects.all() 
     resource_name = 'posts' 

     authorization = Authorization() 
     filtering = { 
      'id' : ALL, 
      } 

我在做什麼錯?

回答

5

您定義的attribute值不正確。 你可以通過幾種方式實現你想要的。

定義dehydrate方法:

def dehydrate(self, bundle): 
    bundle.data['custom_field'] = bundle.obj.get_votes() 
    return bundle 

或者設置get_votes財產和資源的定義,像這樣的領域(我推薦這一個,因爲它是最清晰):

votes = fields.CharField(attribute='get_votes', readonly=True, null=True) 

或者這樣定義:

votes = fields.CharField(readonly=True, null=True) 

而在資源小號定義dehydrate_votes方法,像這樣:

def dehydrate_votes(self, bundle): 
    return bundle.obj.get_votes() 
+0

你的第二個解決方案工作,雖然我有點curious-請問我resources.py知道get_votes指的是在我的models.py的方法?這就是Tastypie的做法嗎? – arooo

+1

如果您使用來自tastypie的ModelResources,則「屬性」會受到模型屬性的影響。準確地說,它是在現場脫水過程中完成的,在這裏: https://github.com/toastdriven/django-tastypie/blob/master/tastypie/fields.py#L102 – aniav