【问题标题】:How to list all items based on foreign key pk Django Rest Framework如何根据外键pk Django Rest Framework列出所有项目
【发布时间】:2022-01-22 02:45:11
【问题描述】:

我想列出保存到某个 Animal 的所有实例。假设一只狗的 id 为 3,我有 2 个狗性别实例,但是当我收到来自 animal/3/sex 的请求时,我只得到一个实例而不是 2。我尝试使用 many=True 到 serializers.PrimaryKeyRelatedField 但它告诉我'动物不可迭代'。你知道怎么做吗?

class AnimalSex(models.Model):
    name = models.CharField(max_length=256)
    slug = models.SlugField(max_length=128, unique=True, null=False, editable=False)
    created_at = models.DateTimeField(editable=False, default=timezone.now)
    updated_at = models.DateTimeField(default=timezone.now)
    animal = models.ForeignKey(Animal, on_delete=models.CASCADE, null=False)

观看次数

class MyAnimalSex(generics.RetrieveAPIView):

    queryset = AnimalSex.objects.all()
    serializer_class = AnimalSexSerializer
    lookup_field = 'pk'

序列化器

class AnimalSexSerializer(serializers.ModelSerializer):

    animal = serializers.PrimaryKeyRelatedField(read_only=True)

    class Meta:
        model = AnimalSex
        fields = ('name', 'slug', 'animal',)

网址

    path('animal/<int:pk>/sex', MyAnimalSex.as_view()),

【问题讨论】:

    标签: django django-rest-framework django-views


    【解决方案1】:

    在这种情况下,您可能希望使用ListAPIView 并根据Animal 的主键进行过滤,因此:

    class MyAnimalSex(generics.ListAPIView):
        queryset = AnimalSex.objects.all()
        serializer_class = AnimalSexSerializer
    
        def get_queryset(self):
            return super().get_queryset().filter(
                animal_id=self.kwargs['pk']
            )

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-27
      • 2017-10-05
      • 1970-01-01
      • 2017-08-15
      • 2019-07-02
      相关资源
      最近更新 更多