2012-09-20 66 views
0

我有一個資源,我試圖公開其投票。與Tastypie的反向關係,AttributeError

class ViewPostResource(ModelResource): 
    user = fields.ForeignKey(UserResource,'user',full=True) 
    votes = fields.ToOneField('voting.resources.GetVotesResource', attribute='vote_set', full=True) 
    class Meta: 
     queryset = UserPost.objects.all() 
     resource_name = 'posts' 
     include_resource_uri = False 

class GetVotesResource(ModelResource): 
    user = fields.ForeignKey(UserResource,'user', full=True) 

    class Meta: 
     queryset = Vote.objects.all() 
     resource_name = 'vote' 

我的投票模式雖然有點不同於正常。我將如何使用以下模型設置公開帖子的投票?

class Vote(models.Model): 
    user   = models.OneToOneField(User, related_name='vote') 
    content_type = models.ForeignKey(ContentType) 
    object_id = models.PositiveIntegerField() 
    object  = generic.GenericForeignKey('content_type', 'object_id') 
    vote   = models.SmallIntegerField(choices=SCORES) 

回答

2

我會用 「水​​」 而不是:

def dehydrate(self, bundle): 
     bundle.data['votes'] = Vote.objects.filter(object_id=bundle.obj.id, content_type=n).count() // or use aggregate to get total votes. 
     return bundle.date 

替換 「N」 與正確的內容類型。

+0

雖然我不想返回計數,但我試圖返回整個Vote對象與user_id和所有。任何想法如何做到這一點? – arooo

+1

你應該仍然可以使用脫水。您只需要逐個映射您需要的字段。或者,它可以是類似bundle.data ['vote'] = Vote.objects.get(user = bundle.object.user).__ dict__。 – dannyroa

+0

這使我朝着正確的方向發展,但我在.filter()上調用.values()而不是.get() - 任何想法爲什麼它在字符串中作爲字典而不是字典返回? – arooo