Лучший способ добавить поле bool в Django queryset/serializer
У меня есть две модели
class A(models.Model):
name = models.CharField(max_length=32)
...
class B(models.Model):
fkey = models.ForeignKey("A", on_delete=models.CASCADE)
...
Я хочу создать набор объектов A на основе условия, если некоторые объекты B ссылаются на A в моем DRF сериализаторе
a1 = A.objects.create(name="1")
a2 = A.objects.create(name="2")
b1 = B.objects.create(fkey=a1)
a_objs = A.objects.filter()
serializer = ASerializer(a_objs, many=True)
serializer.data
{
{
"name": "1"
},
"b_attached": true
},
{
{
"name": "2"
},
"b_attached": false
}
Каким способом лучше всего этого достичь?
Ваш ответ - недопустимый json!
Вы можете использовать вложенную сериализацию для достижения чего-то подобного:
from rest_framework import serializers
from .models import A, B
class ADetailSerializer(serializers.ModelSerializer):
class Meta:
model = A
fields = ("name",)
class ASerializer(serializers.ModelSerializer):
A_OBJ = serializers.SerializerMethodField(method_name='get_a_obj')
b_attached = serializers.SerializerMethodField(method_name='get_b_attached')
class Meta:
model = A
fields = ("A_OBJ", "b_attached")
def get_b_attached(self, obj):
if obj.b_set.exists():
return True
return False
def get_a_obj(self, obj):
return ADetailSerializer(obj, many=False).data
и ответ будет следующим:
[
{
"A_OBJ": {
"name": "1"
},
"b_attached": true
},
{
"A_OBJ": {
"name": "2"
},
"b_attached": false
}
]