Ich muss einige Modelle in Django filtern und sie durch REST zurückgeben, aber ich habe einige Schwierigkeiten. Ich habe 4 Modelle mit Fremdschlüssel in Verbindung etwa so:Django Modell Fremdschlüssel Filterung
class Standort(models.Model):
name = models.CharField(max_length=40)
farbe = models.CharField(max_length=20, default="Black")
class Gruppe(models.Model):
standort = models.ForeignKey(Standort)
name = models.CharField(max_length=40)
class Person(models.Model):
name = models.CharField(max_length=40)
gruppe = models.ForeignKey(Gruppe, related_name='personen')
class Eintrag(models.Model):
person = models.ForeignKey(Person, related_name='eintrage')
typ = models.ForeignKey(Typ)
datum = models.DateField()
und Iam sie wie so Serialisierung:
class EintragSerializer(serializers.ModelSerializer):
class Meta:
model = Eintrag
fields = ('datum', 'typ')
class PersonenSerializer(serializers.ModelSerializer):
eintrage = EintragSerializer(read_only=True, many=True)
class Meta(object):
model = Person
fields = ('id', 'name', 'eintrage')
class GruppenPersonenEintraegeSerializer(serializers.ModelSerializer):
personen = PersonenSerializer(read_only=True, many=True)
class Meta(object):
model = Gruppe
fields = ('id', 'name', 'personnel')
und meiner Meinung nach sieht wie folgt aus:
class GruppenPersonenEintraege(APIView):
def get(self, request, standort, jahr):
gruppen = Gruppe.objects.filter(standort=standort)
serializer = GruppenPersonenEintraegeSerializer(gruppen, many=True)
return Response(serializer.data)
Das Ergebnis sieht aus wie dieses:
[
{
"id": 2,
"name": "2.Schicht",
"personen": [
{
"id": 1,
"name": "Rolf der Tester",
"eintrage": [
{
"datum": "2017-02-16",
"typ": 3
},
{
"datum": "2017-02-15",
"typ": 3
},
{
"datum": "2018-04-05",
"typ": 2
}
]
}
]
},
{
"id": 3,
"name": "Test",
"personen": []
}
]
Das ist völlig in Ordnung, mein Problem ist, wenn ich auch das Jahr "eintrage.datum"
filtern möchte, indem ich: .filter(standort=standort, personen__eintrage__datum__year=2017)
nach Gruppe.objects
. Dann wird der Eintrag mit "id": 2
dreimal wiederholt und der mit "id": 3
wird überhaupt nicht angezeigt. Wie filtere ich nur die Einträge des zweiten verschachtelten Diktats?
Finden Sie einen Weg, dies zu lösen? Ich habe das gleiche Problem. – iNikkz