我的情况是我需要能够POST到资源并自动具有特定的外键关系" get_or_create()ed"。
为了简单起见,我将在这里作一个例子:
我们假设我想发布一个新地址,而城市是外键 - 而且有数百万个城市。城市资源可能具有其他属性,例如人口,国家等,但是对于此示例,假设它们默认为NULL,那就是“确定”。
address: { street: "...", city: "..." }
city: { name: "...", population: 10000, ... }
我有几个问题:
所以我需要以某种方式告诉DRF,城市是一种我希望像SlugRelatedField一样显示为文本的关系,但我不希望它作为可选择的枚举。我也不想将其设置为read_only(这将解决下拉框问题。)
我需要注意什么才能将它们粘合在一起?我想我需要制作某种自定义字段。
答案 0 :(得分:0)
我想我可能找到了正确的方法:从serializers.CharField
导出并覆盖to_internal_value()
到get_or_create()
:
class CityField(serializers.CharField):
def to_internal_value(self, data):
value = super(CityField, self).to_internal_value(data)
return City.objects.get_or_create(name=value)[0]