私はdjango-models
でフィルタリングしている問題を抱えています。このシリアル化されたデータを処理するにはdjango-rest-framework
を使用しています。DRFを使用した逆フィルタDjangoモデル
私がここで欲しいのは、動物が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操作を扱う私のビューセットです。私はHerdViewSet
エンドポイント/api/herd/
を参照するとき
views.py
class HerdViewset(viewsets.ModelViewSet):
"""
This viewset automatically provides `list`, `create`, `retrieve`,
`update` and `destroy` actions.
"""
queryset = Herd.objects.all()
serializer_class = HerdSerializer
は、今私は動物や空の群れ(複数可)を持つすべての群れの結果を得ました。しかし、いくつかの群れの動物が、それはまだそれがspecies_type
はヤギ、ヒツジ、等であるかどうかをその群れに属するすべての動物を返すspecies_type='Cow'
をフィルタリングしていません。..
ここで、 'species_type = 'Cow''というフィルタを作成しましたか? – Enix
@Enixこんにちは、これはビューセットの 'queryset = Herd.objects.all()'にあるはずですが、悲しいことに私の 'Herd'モデルにフィールド動物がないのでこれをどうやってやっているのかまだ分かりません私の 'HerdSerializer'とは異なります。 –
@ ShiftN'Tab animals_type = 'Cow'に従って動物のフィルタリングですべての群データが必要な場合は、モデル構造とフィールド間の関係を更新する必要があります。 –