Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django rest framework Django REST:允许在POST/PUT中获取或创建外键()_Django Rest Framework - Fatal编程技术网

Django rest framework Django REST:允许在POST/PUT中获取或创建外键()

Django rest framework Django REST:允许在POST/PUT中获取或创建外键(),django-rest-framework,Django Rest Framework,我的情况是,我需要能够发布到一个资源,并自动“get_或_create()ed”具有特定的外键关系 为了简单起见,我将在这里制作一个示例: 让我们假设我想发布一个新地址,城市是一个外键——有数百万个城市。城市资源可能有其他属性,如人口、国家等,但在本例中,假设它们默认为NULL,这样就可以了 address: { street: "...", city: "..." } city: { name: "...", population: 10000, ... } 我有几个问题: 当我使用dj

我的情况是,我需要能够发布到一个资源,并自动“get_或_create()ed”具有特定的外键关系

为了简单起见,我将在这里制作一个示例:

让我们假设我想发布一个新地址,城市是一个外键——有数百万个城市。城市资源可能有其他属性,如人口、国家等,但在本例中,假设它们默认为NULL,这样就可以了

address: { street: "...", city: "..." }

city: { name: "...", population: 10000, ... }
我有几个问题:

  • 当我使用django rest HTML界面时,它会尝试将所有城市添加到一个HTML选项框中,该选项框会挂起浏览器,因为选项太多。我不想要下拉选项框。我需要一个文本框
  • 当我提交城市时,我希望创建/更新代码根据名称查找城市并设置关系,或者我希望它创建一个新的城市。本质上是城市名称字段上的get_或_create()。我不希望用户在添加地址之前,必须为每个新城市创建一个新城市
所以我需要告诉DRF city是一个关系,我希望它像SlugRelatedField一样显示为文本,但我不希望它作为可选枚举。我也不想将其设置为只读(这将解决下拉框问题)


我需要看什么才能把它粘在一起?我假设我需要创建某种自定义字段。

我想我可能已经找到了正确的方法:从
序列化程序派生。CharField
并重写
到内部值()
获取或创建()

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]