我有一个Django应用。在其中,我有2个模型。其中一个是组,另一个是成员模型。然后,成员模型具有一个foreignkey,即组模型。我对模型进行了序列化,现在我正在尝试使api根据需要工作。我希望能够调用在末尾具有组名的api,该api作为成员的过滤器仅返回组名的成员。我有2个网址。第一个返回每个组的所有成员,而我希望第二个返回特定组的成员。我尝试了一些与建议不同的方法,但是都没有用。这是我在下面尝试的最后一件事。我将在下面添加我的代码。
型号:
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/', MemberListView.as_view()),
path('members/<name>', MemberGroupListView.as_view()),
观看次数:
class MemberListView(ListAPIView):
queryset = Member.objects.all()
serializer_class = MemberSerializer
class MemberGroupListView(ListAPIView):
queryset = Member.objects.all()
serializer_class = MemberSerializer
filter_backends = (filters.DjangoFilterBackend,)
filterset_fields = ('user', 'host', 'group')
def get_queryset(self):
return self.queryset.filter(group__name=self.request.query_params.get('name'))
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')
答案 0 :(得分:1)
URL参数,例如您的情况下的name
(path('members/<name>', MemberGroupListView.as_view()),
)在基于类的视图中存储在self.kwargs
中,因此您的get_queryset
应该是:
def get_queryset(self):
return self.queryset.filter(group__name=self.kwargs.get('name'))