Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.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
Python Django Rest:如何从相关对象API端点更新外键对象的字段_Python_Django_Django Rest Framework - Fatal编程技术网

Python Django Rest:如何从相关对象API端点更新外键对象的字段

Python Django Rest:如何从相关对象API端点更新外键对象的字段,python,django,django-rest-framework,Python,Django,Django Rest Framework,我有以下两个具有ForeignKey关系的模型: models.py 类数据模型(models.Model): id=models.UUIDField(主键=True,可编辑=False,默认=uuid.uuid4) name=models.CharField(最大长度=1000,唯一性=True,) 类数据点(models.Model): id=models.UUIDField(主键=True,可编辑=False,默认=uuid.uuid4) name=models.TextField() u

我有以下两个具有
ForeignKey
关系的模型:

models.py
类数据模型(models.Model):
id=models.UUIDField(主键=True,可编辑=False,默认=uuid.uuid4)
name=models.CharField(最大长度=1000,唯一性=True,)
类数据点(models.Model):
id=models.UUIDField(主键=True,可编辑=False,默认=uuid.uuid4)
name=models.TextField()
unit=models.ForeignKey(单元,相关的_name='+',on_delete=models.PROTECT)
data\u model=models.ForeignKey(DataModel,on\u delete=models.PROTECT,related\u name='data\u points')
使用以下相应的序列化程序

序列化程序.py
类DataPointSerializer(serializers.ModelSerializer):
unit=serializers.CharField(source=“unit.unique\u key”)
类元:
model=models.DataPoint
字段=['id'、'name'、'unit']
类DataModelSerializer(serializers.ModelSerializer):
dataPoints=DataPointSerializer(source='data\u points',many=True)
类元:
model=models.DataModel
字段=('id','name','dataPoints')
只读字段=('id',)
然后我有一个API端点
/API/v1/data models/
,在那里我可以
获取所有
数据模型
,然后
发布
来创建一个新的。然后在
api/v1/data models/{id}
上,我可以编辑
DataModel
对象的
name
,或者通过传递
name
unit
来添加更多的
DataPoints

我现在想做的是通过
api/v1/data models/{id}
端点,编辑(
PATCH
已经链接到
DataModel
的数据点
,这样我就可以更改它们的
名称
单元
,给定它的
id
,如下:

{
“数据点”:[
{
“id”:“6eb3878d-ea5b-47b9-b9e5-7a606d3596ff”,
“名称”:“测试数据点”,
“单位”:“V”
}
]
}
views.py
类DataModelViewSet(ViewSet.ModelViewSet):
queryset=models.DataModel.objects.all()
serializer\u class=DataModelSerializer
权限\类=(已验证,)
def更新(自我、请求、主键=无、**kwargs):
dm=get\u object\u或\u 404(self.get\u queryset(),pk=pk)
serializer=self.serializer\u类(dm,data=request.data,partial=True)
如果不是序列化程序,则。\u是否有效()
返回响应(serializer.errors,status=status.HTTP\u 400\u BAD\u请求)
serializer.update(dm,serializer.validated_数据)
返回响应(serializer.data,status=status.HTTP\u 200\u OK)
问题:
我应该如何处理
序列化程序
,以便
数据点
id
可以传递到
序列化程序。更新
功能,以便使用字段更新它?因为现在只有
名称
单元
序列化程序中。在我看来,已验证的\u数据

因此,显然用
序列化程序覆盖数据点字段中的id。UUIDField
会起作用。灵感: