Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.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隐式更新所有字段_Python_Django_Django Rest Framework - Fatal编程技术网

Python Django隐式更新所有字段

Python Django隐式更新所有字段,python,django,django-rest-framework,Python,Django,Django Rest Framework,在使用django rest框架时,我有一种基于输入的表单数据更新模型的方法 SpellSerializer.py: from rest_framework import views, serializers, status from .models import Spell class SpellSerializer(serializers.ModelSerializer): # Name = serializers.CharField() class Meta:

在使用django rest框架时,我有一种基于输入的表单数据更新模型的方法

SpellSerializer.py:

from rest_framework import views, serializers, status
from .models import Spell

class SpellSerializer(serializers.ModelSerializer):
    # Name = serializers.CharField()
    class Meta:
        model = Spell
        # fields = ('id', 'owner', 'Name', 'School', 'Subschool')
        fields = '__all__'

    def create(self, validated_data):    
        user = None
        request = self.context.get("request")
        if request and hasattr(request, "user"):
            user = request.user

        validated_data['owner'] = user.id
        return Spell.objects.create(**validated_data)

    def update(self, instance, validated_data):
        instance.Name = validated_data.get('Name', instance.Name)
        instance.save()
        return instance
如果字段的名称都对齐,是否有一种方法可以让模型上的所有字段使用已验证的_数据进行更新?(又名
validated_data.Name
匹配
instance.Name
validated_data.Otherfield
instance.Otherfield
相同,而不必明确列出所有字段。

您可以使用序列化程序的参数。在您看来:

serializer = CommentSerializer(instance, data={'name': 'foo bar'}, partial=True)
if serializer.is_valid():
    serializer.save()
如果未提供其他字段,则不会引发错误

UPD

如果您的意思是不想指定
instance.somefield=validated\u data['somefield']
,则可以在序列化程序中使用以下语法:

def update(self, instance, validated_data):
    instance.Name = validated_data.get('Name', instance.Name)
    [setattr(instance, k, v) for k, v in validated_data.items()]
    instance.save()
    return instance
您可以使用序列化程序的参数。在您的视图中:

serializer = CommentSerializer(instance, data={'name': 'foo bar'}, partial=True)
if serializer.is_valid():
    serializer.save()
如果未提供其他字段,则不会引发错误

UPD

如果您的意思是不想指定
instance.somefield=validated\u data['somefield']
,则可以在序列化程序中使用以下语法:

def update(self, instance, validated_data):
    instance.Name = validated_data.get('Name', instance.Name)
    [setattr(instance, k, v) for k, v in validated_data.items()]
    instance.save()
    return instance

它实际上是在serializer类中。我用完整的类更新了我的原始帖子(至少是相关部分)。我应该把它放在哪里,我还需要列出所有的字段吗?@cclloyd,这样你就不能更改视图并希望将其放在序列化程序级别上?正确吗?不确定,但恐怕不可能。我没有使用任何视图,只是使用DRF生成的任何视图。它说提供方法(创建、更新等)对于每个我想要操作数据的方法。它还有一个create方法,没有列出所有的视图(上面提供)@cclloyd我想我理解你的意思。检查更新的答案。它实际上在序列化器类中。我用完整的类更新了我的原始帖子(至少相关部分)。我应该把它放在哪里,我还需要列出所有的字段吗?@cclloyd,这样你就不能更改视图并希望将其放在序列化程序级别上?正确吗?不确定,但恐怕不可能。我没有使用任何视图,只是使用DRF生成的任何视图。它说提供方法(创建、更新等)对于每个我想要操作数据的方法。它还有一个create方法,它在不列出所有视图(上面提供)的情况下工作@cclloyd我想我理解你的意思。检查更新的答案。