Python 尝试基于嵌套模型foreignkey筛选django视图序列化程序
我有一个django应用程序。在它里面,我有两个模型。其中一个是组,另一个是成员模型。然后成员模型有一个foriegnkey,即组模型。我序列化了模型,现在我正试图让api按我所希望的方式工作。我希望能够调用一个api,该api的末尾有一个组名,作为成员的筛选器传递,以便只返回组名的成员。我有两个网址。第一个返回每个组的所有成员,而我希望第二个只返回某个组的成员。我尝试了一些不同的建议,但没有一个是有效的。这是我在下面做的最后一件事。我将在下面添加我的代码 型号:Python 尝试基于嵌套模型foreignkey筛选django视图序列化程序,python,django,django-rest-framework,django-views,Python,Django,Django Rest Framework,Django Views,我有一个django应用程序。在它里面,我有两个模型。其中一个是组,另一个是成员模型。然后成员模型有一个foriegnkey,即组模型。我序列化了模型,现在我正试图让api按我所希望的方式工作。我希望能够调用一个api,该api的末尾有一个组名,作为成员的筛选器传递,以便只返回组名的成员。我有两个网址。第一个返回每个组的所有成员,而我希望第二个只返回某个组的成员。我尝试了一些不同的建议,但没有一个是有效的。这是我在下面做的最后一件事。我将在下面添加我的代码 型号: class Group(mod
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
网址:
MemberListView
工作正常,但MemberGroupListView
不工作
更新: 添加了序列化程序:
class GroupSerializer(serializers.ModelSerializer):
class Meta:
model = Group
fields = ('name', 'description', 'user_count', 'status', 'image', 'created_by')
class MemberSerializer(serializers.ModelSerializer):
class Meta:
model = Member
fields = ('group', 'user', 'host')
Url参数,例如您案例中的
name
(path('members/',MemberGroupListView.as_view()),
)存储在基于类的视图中的self.kwargs
,因此您的get_queryset
应该是:
def get_queryset(self):
return self.queryset.filter(group__name=self.kwargs.get('name'))
它是如何工作的?当我输入一个存在@RedCricket的组名时,它返回了一个空对象。我将在我的原始帖子中添加一张照片……什么是
self.request.query\params.get('name')
返回?所以,去掉self.queryset.filter(gorup\uu name=…)
或者我如何测试你输入的代码@您需要确保self.request.query\u params.get('name')
返回您期望的结果。打印出值或在调试器中运行代码。
class GroupSerializer(serializers.ModelSerializer):
class Meta:
model = Group
fields = ('name', 'description', 'user_count', 'status', 'image', 'created_by')
class MemberSerializer(serializers.ModelSerializer):
class Meta:
model = Member
fields = ('group', 'user', 'host')
def get_queryset(self):
return self.queryset.filter(group__name=self.kwargs.get('name'))