Здесь, в следующем коде, TaskAppointment
является моделью и имеет поле state
, которое является внешним ключом для TaskAppointmentState
. Используя Django Rest Framework, я хотел бы обновить любую TaskAppointment
и отправить state
для обновления. У меня есть это отношение, которое прекрасно работает. Единственная проблема заключается в том, что фильтры DRF TaskAppointmentState
основаны на его pk
(или id
). TaskAppointmentState
имеет два поля: pk
и state
(будьте осторожны, это не то же самое, что в TaskAppointment
). Я хотел бы изменить значение state
, которое отправляется для обновления, на TaskAppointmentState
на основе поля TaskAppointmentState
"state
" = не id
, а state
.
. точнее, вместо того, чтобы делать instance.status_id = state.id
в следующем коде, я хотел бы вместо этого сделать этот псевдокод: instance.status_id = "SELECT id FROM TaskAppointmentState WHERE state=request.GET['state']
.
Может быть, я мог бы избавиться от TaskAppointmentStateSerializer
? Если у вас есть рабочий раствор ...
class TaskAppointmentStateSerializer(BaseSerializer):
class Meta:
model = TaskAppointmentState
class TaskAppointmentSerializer(BaseSerializer):
state = TaskAppointmentStateSerializer(required=False)
def update(self, instance, validated_data):
try:
state = validated_data.pop('state')
instance.status_id = state.id
except KeyError:
pass
# ... plus any other fields you may want to update
return instance
class Meta:
model = TaskAppointment
fields = ['id', 'date_start', 'date_end', 'state']
read_only_fields = ['id', ]