在客户订单中发布产品数组时,我收到无效的关键字参数。我该怎么办?

问题描述 投票:0回答:2

首先,我得到一个错误,比如在序列化产品数组时创建一个显式的create方法。所以我添加了它,但我得到了这个错误:

TypeError:'customerorder'是此函数的无效关键字参数

这是我的serializers.py

class ProductSerializer(serializers.ModelSerializer):
    product_id = serializers.IntegerField(required=False)

    class Meta:
        model = Product
        fields = '__all__'

class CustOrderSerializer(serializers.ModelSerializer):
    price = serializers.SlugRelatedField(slug_field='price', queryset=Price.objects.all())
    # product = serializers.SlugRelatedField(slug_field='product', queryset=Product.objects.all())
    area = serializers.SlugRelatedField(slug_field='address', queryset=Area.objects.all())
    city = serializers.SlugRelatedField(slug_field='city', queryset=City.objects.all())
    product = ProductSerializer(many=True)

    class Meta:
        model = CustOrder
        fields = '__all__'

    def create(self, validated_data):
        product = validated_data.pop('product')
        customerorder = CustOrder.objects.create(**validated_data)
        for product in product:
            Product.objects.create(**product, customerorder= customerorder)
        return customerorder

这是models.py

class Product(models.Model):
    product_id = models.AutoField(primary_key=True)
    product = ArrayField(models.CharField(max_length=200, blank=True))
    def __str__(self):
       return str(self.product)

class CustOrder(models.Model):
    Customer_id = models.AutoField(primary_key=True)
    CustomerName = models.CharField(max_length=200)
    email = models.EmailField(max_length=70,blank=True, null= True, unique= True)
    gender = models.CharField(max_length=6, choices=GENDER_CHOICES)
    phone = PhoneField(null=False, blank=True, unique=True)
    landmark = models.PointField()
    #landmark = models.TextField(max_length=400, help_text="Enter the landmark", default='Enter landmark')
    houseno = models.IntegerField(default=0)
    #product_name = models.CharField(max_length=200, choices=PRODUCT_CHOICES,default='Boneless chicken')
    # product_id = models.ForeignKey(Product, on_delete=models.CASCADE,related_name='custorder_productid')
    product = models.ManyToManyField(Product, blank=True,related_name='pricetag')
    quantity = models.IntegerField(default=0)
    # price_id = models.ForeignKey(Price)
    price = models.ForeignKey(Price, on_delete=models.SET_NULL, null=True,related_name='pricetag')
    #price = models.DecimalField(max_digits=50, decimal_places=5, default=48.9)
    pay_method = models.CharField(max_length=200,choices=PAYMENT_CHOICES, default='RAZOR PAY')
    city = models.ForeignKey(City, on_delete=models.SET_NULL, null=True) 
    area = models.ForeignKey(Area, on_delete=models.SET_NULL, null=True)
    # Price.objects.aggregate(Sum('price'))

    def __str__(self):
         return self.CustomerName
django django-rest-framework django-serializer
2个回答
0
投票

这里有几个错误。

首先,出于某种原因,您已将相关名称从Product返回到CustOrder,如pricetag。该名称似乎与关系的任何一方无关,因此不确定为何使用它。

然而,即使进行了这种更改,它仍然无法工作,因为您无法在创建时设置多对多关系。您需要创建产品,然后将其添加到订单中。

但这仍然没有意义,因为你实际上并不想在这里创造产品;您想要将现有产品添加到订单中。所以就这样做:

    customerorder = CustOrder.objects.create(**validated_data)
    customerorder.product.add(*product)

0
投票

你的Product模型没有字段customerorder。这就是Django提出错误的原因。

© www.soinside.com 2019 - 2024. All rights reserved.