У меня есть следующие модели:Выполнение функции в качестве источника в Serializer Джанго
class A(Model):
pass
class B(Model):
a = ForeignKey(A, related_name = 'b')
b_field = CharField(max_length=64)
А теперь я хочу, чтобы сериализовать Объект, в котором я хочу, чтобы иметь первый объект б. Я использовал этот код:
class BSerializer(ModelSerializer):
class Meta:
model = B
fields = '__all__'
class ASerializer(ModelSerializer):
b = BSerializer(source='b.first')
class Meta:
model = A
fields = '__all__'
Это используется для работы, но теперь мои тесты блок не удается:
AttributeError: Got AttributeError when attempting to get a value for field `b_field` on serializer `BSerializer`.
The serializer field might be named incorrectly and not match any attribute or key on the `method` instance.
Original exception text was: 'function' object has no attribute 'b_field'.
Очевидно, что b.first
является функцией, и что на самом деле не имеет такого атрибута. Я хочу, чтобы исходное поле выполняло эту функцию. Я попробовал следующую строку:
b = BSerializer(source='b.first')
Но дал встретил следующую ошибку:
AttributeError: Got AttributeError when attempting to get a value for field `b` on serializer `ASerializer`.
The serializer field might be named incorrectly and not match any attribute or key on the `A` instance.
Original exception text was: 'RelatedManager' object has no attribute 'first()'.
- Has это поведение в последнее время изменилось?
- Как я могу взять первый объект b внутри сериализации?
Это работает как шарм, спасибо! :-D – physicalattraction