Ошибка поля в / добавить в корзину / тестовый товар1

#javascript #python #html #css #django

#javascript #python #HTML #css #django

Вопрос:

Здравствуйте, ребята, мне нужна помощь здесь, пожалуйста, при попытке нажать кнопку dd в корзину я получил это сообщение.

Ошибка поля в /add-to-cart /test-product1/ Не удается разрешить ключевое слово ‘ordered’ в поле. Возможны следующие варианты: идентификатор, товар, item_id, заказ, количество

 my views.py for the add to cart function.

def add_to_cart(request, slug):
    item = get_object_or_404(Item, slug=slug)
    order_item, created = OrderItem.objects.get_or_create(
        item=item,
        user=request.user,
        ordered=False
    )
    order_qs = Order.objects.filter(user=request.user, ordered=False)
    if order_qs.exists():
        order = order_qs[0]
        # check if the order item is in the order
        if order.items.filter(item__slug=item.slug).exists():
            order_item.quantity  = 1
            order_item.save()
        else:
            ordered_date = timezone.now()
            order = Order.objects.create(user=request.user, 
                           ordered_date=ordered_date)
            order.items.add(order_item)
        return redirect("store:product", slug=slug)
  

мой models.py

 class Order(models.Model):
    user = models.ForeignKey(settings.AUTH_USER_MODEL,
                             on_delete=models.CASCADE)
    item = models.ManyToManyField(OrderItem)
    start_date = models.DateTimeField(auto_now_add=True)
    ordered_date = models.DateTimeField()
    ordered = models.BooleanField(default=False)

    def __str__(self):
       return self.user.username
  

Комментарии:

1. Это означает, что ordered=False не существует как поле. Обратите внимание, что это OrderItem модель, а не Order модель.

2. Это элемент заказа модели моего заказа (модели. Модель): товар = модели. Внешний ключ (элемент, on_delete=модели. КАСКАДНОЕ) количество = модели. Целочисленное поле (по умолчанию=1) def __str__(self): возвращает f»{self.item.количество} из {self.item.title}»

Ответ №1:

Вы пытаетесь выполнить get_or_create над OrderItem моделью. Однако эта модель не содержит поля ordered (как подтверждено в вашем комментарии). Поле ordered существует только в Order модели, следовательно, почему Django вызовет исключение, в котором говорится, что поле не существует в модели.

Ответ №2:

 then include all naming's to your view.py.```

```my views```
```in the views.py in my cart function, I used the order, 
created method whereby i queried my Order Class model from my model.py. 
then I made sure that the object that is being called has also be 
mentioned also in my model class. just like the customer object. 
if the object been called hasn't been mentioned you are must
 likely to get a field error.```

    def cart(request):
        
        if request.user.is_authenticated:
            customer = request.user.customer
            order, created = Order.objects.get_or_create(customer=customer, complete=False)
            items = order.orderitem_set.all()
        else:
            items = []
    
        context = {'items':items}
        return render(request, 'shop/cart.html', context)
    
    class Order(models.Model):
        customer = models.ForeignKey(Customer, on_delete=models.SET_NULL, null=True)
        date_ordered = models.DateTimeField(auto_now_add=True)
        complete = models.BooleanField(default=False, null=True, blank=False)
        transaction_id = models.CharField(max_length=200, null=True)
    
        def __str__(self):
            return str(self.id)

    class OrderItem(models.Model):
        product = models.ForeignKey(Product, on_delete=models.SET_NULL, null=True)
        order = models.ForeignKey(Order, on_delete=models.SET_NULL, null=True)
        quantity = models.IntegerField(default=0, null=True, blank=True)
        date_added = models.DateTimeField(auto_now_add=True)
    
        def __str__(self):
            return str(self.product.id)

  

Комментарии:

1. Привет! Итак … это плохая практика — «просто вставлять код» в ответ. Не могли бы вы добавить немного больше контекста? Обычно небольшого объяснения того, что вы сделали, было бы достаточно. Спасибо!

2. хорошо, спец. Я новичок здесь, но я убедился, что мое имя клиента точно соответствует тому, что я использовал в своей модели заказа. и это было то, что я использовал в своем views.py в моей функции корзины. когда я делал метод заказа или создания. если то, что вы вызываете в своем методе order или create, не указано в точной модели, которую вы запрашиваете, вы, скорее всего, получите ошибку поля. Спасибо за исправление, брат.

3. Не беспокойтесь, и добро пожаловать. Что-то, что нужно учитывать в следующий раз 🙂