我有Contact
模型来列出User
对象的关注者,我尝试过滤User
的联系人,但仍然无法获得正确的{{1} }。我的queryset
模型很简单,只有两个Contact
:
ForeignKey
我为class Contact(models.Model):
user_from = models.ForeignKey(User,related_name='rel_from_set', on_delete=models.CASCADE,)
user_to = models.ForeignKey(User,related_name='rel_to_set', on_delete=models.CASCADE,)
def __str__(self):
return '{} follow {}'.format(self.user_from, self.user_to)
和User
创建了序列化器:
Contact
并尝试通过视图进行查询:
##Contact Serializer
class ContactsSerializer(serializers.ModelSerializer):
user_from = serializers.StringRelatedField(read_only=True)
user_to = serializers.StringRelatedField(read_only=True)
class Meta:
model = Contact
fields = ["user_from", "user_to"]
##UserSerializer
class UserInformationSerializer(serializers.ModelSerializer):
followers = ContactsSerializer(many=True, read_only=True)
class Meta:
model = User
fields = ['first_name', 'last_name', 'followers']
现在我收到错误消息:
class FollowerListView(APIView):
queryset = Contact.objects.all()
serializer_class = ContactsSerializer
lookup_field = "username"
def get(self, request, format=None, slug=None):
kwarg_username = self.kwargs.get("slug")
user = User.objects.filter(is_active=1).filter(username=kwarg_username)
print(user.username)
contacts = Contact.objects.filter(user_to=user.id)
serializer = ContactsSerializer(contacts)
return Response(serializer.data)
如果我尝试AttributeError at /api/member/ytsejam/followers/
'QuerySet' object has no attribute 'username'
print(user.username)
,则可以看到用户print(user)
。
你可以指导我如何纠正吗?
谢谢
答案 0 :(得分:1)
filter
将始终返回查询集。如果您希望检索单个项目,请使用get
。
看起来像这样:
def get(self, request, format=None, slug=None):
kwarg_username = self.kwargs.get("slug")
user = User.objects.filter(is_active=1).get(username=kwarg_username)
print(user.username)
contacts = Contact.objects.filter(user_to=user.id)
serializer = ContactsSerializer(contacts)
return Response(serializer.data)
您当然可以一口气做到这一点:
User.objects.get(is_active=1, username=kwarg_username)
但是请注意,如果您的模型中有两行可以满足此调用,则Django将抛出错误。最好确保username
具有unique
约束。