Вложенный сериализатор создает новый объект
У меня есть сериализатор под названием EntrySerializer, и он должен возвращать данные о сотрудниках, но если я хочу создать новую запись, он хочет создать новый объект персонала и выдает ошибку. Есть ли что-нибудь вроде поля только для чтения для моего сериализатора? Он должен создать новую запись, но присвоить уже созданный объект персонала.
class EntrySerializer(serializers.ModelSerializer):
staff = serializers.SerializerMethodField('get_staff')
def get_staff(self, obj):
return MyUserSerializer(obj.staff).data
class Meta:
model = Entry
depth = 1
fields = ('time_spend', 'staff',)
Ошибка:
django.db.utils.IntegrityError: ERROR: NULL-значение в столбце "staff_id" отношения "tagesbericht_tagesbericht_Entry" Not-Null-Constraint DETAIL: (54, 00:00:08.5, null, 61).
POST:
"tagesbericht_entry_set": [ { "штат": 2, "time_spend": "00:12:08" } ]
Думаю, вам нужно добавить поле staff_id
для записи.
class EntrySerializer(serializers.ModelSerializer):
staff = MyUserSerializer(read_only = True)
staff_id = Serializers.IntegerField(write_only = True)
class Meta:
model = Entry
depth = 1
fields = ('time_spend', 'staff', 'staff_id')
А полезная нагрузка POST должна быть
{
"staff_id": 2,
"time_spend": "00:12:08"
}