gpt4 book ai didi

python - Django Rest Framework RetreiveAPIView get() 返回了 2 个结果

转载 作者:太空宇宙 更新时间:2023-11-04 07:51:27 25 4
gpt4 key购买 nike

我有一个带有 django rest 框架的 django 项目。我正在尝试使用 Retreive API View 返回成员详细信息。我想根据在 teh url 中传递的带有组名称的参数来获取所有成员记录。我尝试使用 .get().filter().get() 返回了一个返回超过 2 个项目的错误.filter() 不是字典的一部分。

我尝试了 .list.retrieve

如何检索基于超过 1 个项目的数据对象。这是我调用的 View 。

class MemberDetailView(RetrieveAPIView):
queryset = Member.objects.all()
serializer_class = MemberSerializer

def get_object(self):
return self.queryset.filter(group__name=self.kwargs.filter('name'))

模型

class Member(models.Model):
group = models.ForeignKey(Group, on_delete=models.CASCADE)
user = models.ForeignKey(User, on_delete=models.CASCADE)
host = models.BooleanField(default=False)
created_at = models.DateTimeField(auto_now_add=True)

def __str__(self):
return self.group.name + ' - ' + self.user.username

网址

path('members/', MemberListView.as_view()),
path('members/<name>', MemberDetailView.as_view()),

__________________________________________________-

更新:

所以当我覆盖列表时出现错误:

类型错误在/api/groups/members/homiez
list() 得到了一个意外的关键字参数“name”

当我不覆盖列表时,我得到一个空的结果对象。

这是我现在拥有的代码...

class MemberGroupListView(ListAPIView):
serializer_class = MemberSerializer

def get_queryset(self):
return Member.objects.filter(group__name=self.request.query_params.get('name'))

def list(self, request):
# Note the use of `get_queryset()` instead of `self.queryset`
queryset = self.get_queryset()
serializer = MemberSerializer(queryset, many=True)
return Response(serializer)

模型

class Group(models.Model):
name = models.CharField(max_length=42)
description = models.CharField(max_length=220)
user_count = models.IntegerField()
status = models.CharField(max_length=12)
image = models.ImageField(upload_to='group_images/')
created_by = models.ForeignKey(User, on_delete=models.CASCADE)
created_at = models.DateTimeField(auto_now_add=True)

def __str__(self):
return self.name + ' - ' + self.created_by.username

class Member(models.Model):
group = models.ForeignKey(Group, on_delete=models.CASCADE)
user = models.ForeignKey(User, on_delete=models.CASCADE)
host = models.BooleanField(default=False)
created_at = models.DateTimeField(auto_now_add=True)

def __str__(self):
return self.group.name + ' - ' + self.user.username

网址:

path('members/<name>', MemberGroupListView.as_view()),

最佳答案

RetrieveAPIView 专为检索单个实例而设计。你应该使用 ListAPIView反而。并使用 get_queryset 方法代替 get_object

ListAPIView 使用 many=True 参数调用序列化器,它返回一个对象列表而不是一个。

关于python - Django Rest Framework RetreiveAPIView get() 返回了 2 个结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54174996/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com