2

このエラーが発生します:

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,
            }

私は何が間違っているのですか?

4

1 に答える 1

6

定義したattribute値が適切ではありません。あなたはいくつかの方法であなたが望むことを達成することができます。

dehydrateメソッドを定義します。

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

または、get_votesasプロパティを設定し、そのようにリソースでフィールドを定義します(最も明確なので、これをお勧めします)。

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()
于 2012-09-19T12:01:45.483 に答える