Я получаю недопустимый аргумент ключевого слова при публикации массива товаров в заказе клиента. Что я должен делать? - PullRequest
0 голосов
/ 29 марта 2019

Сначала я получил сообщение об ошибке, например, при создании явного метода 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

Ответы [ 2 ]

0 голосов
/ 29 марта 2019

Ваша модель Product не имеет поля customerorder. Вот почему Джанго выдает ошибку.

0 голосов
/ 29 марта 2019

Здесь есть несколько ошибок.

Во-первых, по какой-то причине вы присвоили связанное имя из Product обратно CustOrder как pricetag. Это имя не относится ни к одной из сторон отношений, поэтому не уверен, почему вы его использовали.

Однако даже с этим изменением оно все равно не будет работать, потому что вы не можете установить отношения «многие ко многим» во время создания. Вам нужно будет создать продукт, а затем добавить его к заказу.

Но это все же не имеет смысла, потому что вы на самом деле не хотите создавать продукты здесь вообще; Вы хотите добавить существующие товары в заказ. Так что просто сделайте это:

    customerorder = CustOrder.objects.create(**validated_data)
    customerorder.product.add(*product)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...