maer
maer

Reputation: 156

Manager object has no attribute 'save'

In my serializers.py I have a OrderCreateSerializer:

class OrderCreateSerializer(ModelSerializer):

    data_params = serializers.DictField()  # 根据产品数据模型不同而异

    class Meta:
        model = Order
        fields = (
            "product_describe",  # 产品描述 (购买xx产品 + 参数)
            "billing_type", # 计费类型 ("包年包月")
            "data_params",  # 数据
        )
    def create(self, validated_data):

        request = self.context.get("request")
        if request and hasattr(request, "user"):
            user = request.user

        validated_data["order_num"] = generateOrderNum(userid=user.id)
        validated_data["order_status"] = "未支付"
        validated_data["order_status"] = "未支付"

        data_dic = validated_data.pop("data_params") #

        # data_dic["data"]["profile"]

        validated_data["buytime"] = data_dic["data"]["buytime"]
        validated_data["count"] = data_dic["data"]["count"]
        validated_data["paytype"] = ""   

        validated_data["cost"] = ""  
        validated_data["account"] = user.account   

        return Order.objects.save(**validated_data)  # this is the line 57

When I save the validated_data, it report the bellow error:

enter image description here

Manager object has no attribute 'save'

My Order model is like bellow, there is many fields in it :

class Order(models.Model):
    """
    订单
    """
    order_num = models.CharField(max_length=128, unique=True)  # 订单编号
    order_status = models.CharField(max_length=12)  # 订单状态  "未支付", "已支付,未完成", "已完成", "已经删除","其他"
    product_describe = models.TextField()  # 产品描述
    billing_type = models.CharField(max_length=16)  # 计费类型
    buytime = models.CharField(max_length=16)  # 比如:1月  永久
    count = models.IntegerField()  # 购买数量
    paytype = models.CharField(max_length=16)  # 支付方式(支付包,微信,xxx)
    cost = models.DecimalField(max_digits=8, decimal_places=2, default=0.00)  # 费用(需要花费多少钱)
    account = models.ForeignKey(to=Account) # 所属账户

    ctime = models.DateTimeField(auto_now_add=True)  # 创建时间
    uptime = models.DateTimeField(auto_now=True)  # 更新时间

    def __str__(self):
        return self.product_describe
    def __unicode__(self):
        return self.product_describe

I don't know why there is the Manager object here.

Upvotes: 0

Views: 1903

Answers (2)

Shadow
Shadow

Reputation: 9427

You're calling save on the manager (ie, objects)

return Order.objects.save(**validated_data)

You call save on models.

I assume you're trying to create the model, in which case you want create.

return Order.objects.create(**validated_data)

Upvotes: 1

kekkler
kekkler

Reputation: 326

Order.objects is an instance of the Manager class. The save method is a method of the model class.

Try:Order(**validated_data).save()

Upvotes: 0

Related Questions