如何根据外键列出所有项目pk Django Rest Framework
How to list all items based on foreign key pk Django Rest Framework
我想列出保存到某个动物的所有实例。假设一只狗的 ID 为 3,我有 2 个狗性别实例,但是当我从 animal/3/sex 收到请求时,我只得到一个实例而不是 2。我尝试使用 many=True 到 serializers.PrimaryKeyRelatedField 但它向我显示 'Animal is not iterable'。你知道怎么做吗?
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',)
URL
path('animal/<int:pk>/sex', MyAnimalSex.as_view()),
在这种情况下,您可能希望使用 ListAPIView
并根据 Animal
的主键进行过滤,因此:
class MyAnimalSex(<b>generics.ListAPIView</b>):
queryset = AnimalSex.objects.all()
serializer_class = AnimalSexSerializer
def get_queryset(self):
return super().get_queryset().filter(
<strong>animal_id=self.kwargs['pk']</strong>
)
我想列出保存到某个动物的所有实例。假设一只狗的 ID 为 3,我有 2 个狗性别实例,但是当我从 animal/3/sex 收到请求时,我只得到一个实例而不是 2。我尝试使用 many=True 到 serializers.PrimaryKeyRelatedField 但它向我显示 'Animal is not iterable'。你知道怎么做吗?
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',)
URL
path('animal/<int:pk>/sex', MyAnimalSex.as_view()),
在这种情况下,您可能希望使用 ListAPIView
并根据 Animal
的主键进行过滤,因此:
class MyAnimalSex(<b>generics.ListAPIView</b>):
queryset = AnimalSex.objects.all()
serializer_class = AnimalSexSerializer
def get_queryset(self):
return super().get_queryset().filter(
<strong>animal_id=self.kwargs['pk']</strong>
)