Django隐式更新所有字段

2024-04-19 11:55:38 发布

您现在位置:Python中文网/ 问答频道 /正文

在使用django rest框架时,我有一种方法可以根据输入的表单数据更新模型。你知道吗

你知道吗拼写序列化程序.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

有没有一种方法可以让模型上的所有字段在字段名称都对齐的情况下用经过验证的\u数据进行更新?(又名validated_data.Name匹配instance.Namevalidated_data.Otherfieldinstance.Otherfield相同,而不必显式列出所有字段。你知道吗


Tags: 数据方法instancenamefrom模型importself
1条回答
网友
1楼 · 发布于 2024-04-19 11:55:38

可以使用序列化程序的^{}参数。在你看来:

serializer = CommentSerializer(instance, data={'name': 'foo bar'}, partial=True)
if serializer.is_valid():
    serializer.save()

如果没有提供其他字段,则不会引发错误。你知道吗

升级版

如果您的意思是不想指定instance.somefield = validated_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

相关问题 更多 >