簡體   English   中英

類型錯誤:update() 需要 2 個位置參數,但給出了 3 個:Python

[英]TypeError: update() takes 2 positional arguments but 3 were given : Python

我收到TypeError : update() takes 2 positional arguments but 3 were given 我不知道為什么會發生此錯誤。 如果有人能弄清楚我在哪里做錯了,那么將不勝感激。 非常感謝你。

序列化程序.py:


class ShopOwnerOrderManageSerializer(Serializer):
    invoice_no = CharField(read_only=True)
    shopowner_expected_date  = CharField(allow_blank=True)
    shopowner_estimated_time = CharField(allow_blank=True)
    status = CharField(allow_blank=True)

    class Meta:
        model = CarOwnerShopConfirm
        fields= ['shopowner_expected_date','shopowner_estimated_time','status']

    def update(self,validated_data):
        shopowner_expected_date        = validated_data['shopowner_expected_date'] 
        shopowner_estimated_time       = validated_data['shopowner_estimated_time'] 
        status                         = validated_data['status']

        shopconfirm_obj = CarOwnerShopConfirm.objects.update(
                shopowner_expected_date   =   shopowner_expected_date,
                shopowner_estimated_time = shopowner_estimated_time,
                status = status
                )       
        shopconfirm_obj.save()
    
        return validated_data  

Serializer update采用三個參數: self 、 * instance*驗證數據 通常情況下,數據庫保存在數據庫中的變化,但只更新實例。 例如,視圖隨后可以決定通過調用.save()來更新數據庫。

您可能還想使用ModelSerializer ,因為簡單的Serializer不考慮Meta內部類,因此不會將序列化器字段“綁定”到對象的這些字段:

class ShopOwnerOrderManageSerializer(ModelSerializer):
    invoice_no = CharField(read_only=True)
    shopowner_expected_date  = CharField(allow_blank=True)
    shopowner_estimated_time = CharField(allow_blank=True)
    status = CharField(allow_blank=True)

    class Meta:
        model = CarOwnerShopConfirm
        fields= ['shopowner_expected_date','shopowner_estimated_time','status']

    def update(self, instance, validated_data):
        instance.shopowner_expected_date = validated_data.get('shopowner_expected_date', instance.shopowner_expected_date)
        instance.shopowner_estimated_time = validated_data.get('shopowner_estimated_time', intance.shopowner_estimated_time)
        instance.status = validated_data.get('status', instance.status)
        return instance

然而,由於 Django 的ModelSerializer會像我們在這里所做的那樣實現update ,你可以完全省略它:

class ShopOwnerOrderManageSerializer(ModelSerializer):
    invoice_no = CharField(read_only=True)
    shopowner_expected_date  = CharField(allow_blank=True)
    shopowner_estimated_time = CharField(allow_blank=True)
    status = CharField(allow_blank=True)

    class Meta:
        model = CarOwnerShopConfirm
        fields= ['shopowner_expected_date','shopowner_estimated_time','status']

    #  update

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM