【发布时间】:2019-10-15 12:33:52
【问题描述】:
这里,在下面的代码中,TaskAppointment 是一个模型,并且有一个字段state,它是TaskAppointmentState 的外键。使用 Django Rest Framework,我想更新任何 TaskAppointment 并发送 state 进行更新。我有这种完美的关系。唯一的问题是 DRF 根据其pk(或id)过滤TaskAppointmentState。 TaskAppointmentState 有两个字段:pk 和 state(注意它与 TaskAppointment 中的字段不同)。我想根据TaskAppointmentState“state”字段=不是id,而是state,将发送更新的值state更改为TaskAppointmentState。
更准确地说,我不想在下面的代码中做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', ]
【问题讨论】:
-
您的问题不是很清楚,也许您可以更详细和详细地说明您的问题。
-
嗨@rahultyagi 我已经更新了,是不是更容易理解?
-
当您在 TaskAppointment 模型中为 TaskAppointmentState 创建外键时,您可以使用“to_field”参数提供备用字段/列来制作外键,这样您的第二个序列化程序将始终匹配状态而不是ID。我真的不明白你的问题,但我认为这可能会解决你的问题
标签: django django-rest-framework