【发布时间】:2016-11-22 09:37:14
【问题描述】:
我在django-models 中的过滤有问题,我正在使用django-rest-framework 处理这个序列化数据。
我想要在这里获取所有牛群记录,其中动物可能有species_type='Cow' 或空牛群。
这是我的模型。
models.py
class Herd(models.Model):
name = models.CharField(max_length=25)
description = models.TextField(max_length=250, null=True)
created_at = models.DateTimeField(auto_now_add=True, editable=False)
updated_at = models.DateTimeField(auto_now=True, editable=False)
class Animal(models.Model):
name = models.CharField(max_length=25)
species_type = models.CharField(max_length=25)
breed = models.CharField(max_length=25)
herd = models.ForeignKey(Herd, related_name='animals', on_delete=models.CASCADE)
created_at = models.DateTimeField(auto_now_add=True, editable=False)
updated_at = models.DateTimeField(auto_now=True, editable=False)
serializers.py
class AnimalSerializer(serializers.ModelSerializer):
class Meta:
model = Animal
fields = [
'name',
'species_type',
'breed'
]
read_only_fields = ['id', 'created_at', 'updated_at']
class HerdSerializer(serializers.ModelSerializer):
animals = AnimalSerializer(many=True, read_only=True)
class Meta:
model = Herd
fields = [
'id',
'name',
'description',
'animals'
]
read_only_fields = ['created_at', 'updated_at']
这是我处理所有 crud 操作的视图集。
views.py
class HerdViewset(viewsets.ModelViewSet):
"""
This viewset automatically provides `list`, `create`, `retrieve`,
`update` and `destroy` actions.
"""
queryset = Herd.objects.all()
serializer_class = HerdSerializer
现在,当我浏览HerdViewSet 端点/api/herd/ 时,我得到了所有有动物的牛群或空牛群的结果。但是某些畜群中的动物没有过滤species_type='Cow',它仍然返回属于该畜群的所有动物,无论species_type是山羊、绵羊等。
【问题讨论】:
-
你在哪里制作了过滤器
species_type='Cow'? -
@Enix 嗨,它应该在视图集中的这一行
queryset = Herd.objects.all()中,但遗憾的是我仍然不知道如何做到这一点,因为我的Herd模型中没有野外动物,不像在我的HerdSerializer。 -
@ShiftN'Tab 如果您需要根据species_type='Cow'进行动物过滤的所有畜群数据,那么您需要更新模型结构和字段之间的关系。
标签: python django django-models django-rest-framework