Ich habe Probleme bei der Filterung in django-models
und ich verwende django-rest-framework
, um diese serialisierten Daten zu arbeiten.Reverse Filter Django Modell mit DRF
Was ich will hier ist, um alle Herden aufnehmen beide mit Tier (en), in denen das Tier eine species_type='Cow'
oder eine leere Herde (s) haben konnte.
Das sind meine Modelle.
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']
Das ist mein Viewset die alle CRUD-Operationen handhaben. Jetzt
views.py
class HerdViewset(viewsets.ModelViewSet):
"""
This viewset automatically provides `list`, `create`, `retrieve`,
`update` and `destroy` actions.
"""
queryset = Herd.objects.all()
serializer_class = HerdSerializer
wenn ich durchsuchen Sie die HerdViewSet
Endpunkt /api/herd/
Ich habe die Ergebnisse aller Herden mit Tieren oder leer Herde (n). Aber die Tiere in irgendeiner Herde filtern nicht das species_type='Cow'
es noch alle Tier zurückkehrt, die zu diesen Herd gehört, ob es species_type
ist Ziege, Schaf, etc ..
wo hast du den Filter 'spezies_type = 'Cow'' gemacht? – Enix
@Enix hi, es sollte hier in dieser Zeile sein 'querieset = Herd.objects.all()' im Viewset aber leider habe ich noch keine Idee, wie das geht, da es in meinem 'Herd' Modell keine Feldtiere gibt anders als in meinem 'HerdSerializer'. –
@ ShiftN'Tab Wenn Sie alle Herden-Daten mit Tierfilterung nach Spezies_Typ = 'Kuh' benötigen, dann müssen Sie Ihre Modellstruktur und die Beziehungen zwischen den Feldern aktualisieren. –