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框架放置在ModelViewSet上_Python_Django_Python 3.x_Django Models_Django Rest Framework - Fatal编程技术网

Python 使用嵌套对象Django Rest框架放置在ModelViewSet上

Python 使用嵌套对象Django Rest框架放置在ModelViewSet上,python,django,python-3.x,django-models,django-rest-framework,Python,Django,Python 3.x,Django Models,Django Rest Framework,我正在用django rest框架构建一个API。我有这些模型: class Organism(models.Model): name = models.CharField(max_length=255) address = models.ForeignKey(Address, on_delete=models.CASCADE) type = models.ForeignKey(Type, on_delete=models.CASCADE) class Address(

我正在用django rest框架构建一个API。我有这些模型:

class Organism(models.Model):
    name = models.CharField(max_length=255)
    address = models.ForeignKey(Address, on_delete=models.CASCADE)
    type = models.ForeignKey(Type, on_delete=models.CASCADE)

class Address(models.Model):
    street = models.CharField(max_length=255, blank=True)

class Type(models.Model):
    name = models.CharField(max_length=255, blank=True)
这是“我的模式”有机体的视图:

class OrganismViewSet(viewsets.ModelViewSet):
    queryset = Organism.objects.all()
    serializer_class = OrganismSerializer
    pagination_class = StandardResultsSetPagination
    filter_backends = (filters.SearchFilter, DjangoFilterBackend)
    filter_class = OrganismFilter
    search_fields = ('name')
和我的序列化程序:

class OrganismSerializer(serializers.ModelSerializer):
    addresse = AddressSerializer()
    type = TypeSerializer()
    class Meta:
        model = Organism
        fields = '__all__'

    def update(self, instance, validated_data):
        // What I should write to do something "elegant"
让我们想象一下,当我得到我的生物体时,我有:

{
    "address": {
        "id": 1
        "street": "test"
    },
    type: {
        "id": 1,
        "name": "type Organism"
    },
    "name":"TestTest",
}
因此,我试图通过发送以下消息来更新一个有机体(我想更改街道名称,但不想创建新对象并更改数据库中存在的类型

{
    "address": {
        "id": 1
        "street": "new name"
    },
    type: {
        "id": 2,
        "name": "new type"
    }
    "name":"TestTest",
}
事实上,我在方法更新的参数“validated_data”中没有对象的ID。
如果你们知道如何继续。。。提前谢谢。

是不是因为您的模型中没有明确定义“id”,调用Is\u valid()会删除“id”字段?在这种情况下,您是否尝试在序列化程序中定义id=models.serializers.IntegerField(required=False)?好的,现在我在已验证的\u数据中有了id字段。是否存在自动检测嵌套对象ID已更改并在数据库中更新的机制?或者我应该将其与if instance.type.id!=验证的_data.pop('type')['id']?然后我执行Type.objects.get(id=xx)和instance.Type=new\u Type,最后是instance.save()。我觉得这样做很乏味。我很确定它不存在,你必须写你自己的方法。这类似于一个问题。