【问题标题】:FieldError at /add-to-cart/test-product1/add-to-cart/test-product1 处的 FieldError
【发布时间】:2020-08-28 20:40:16
【问题描述】:

大家好,我需要帮助,在尝试我的 dd to cart 按钮时,我收到了这条消息。

/add-to-cart/test-product1/ 处的字段错误 无法将关键字“有序”解析为字段。选项有:id、item、item_id、order、quantity

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)

我的模型.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

【问题讨论】:

  • 这意味着ordered=False 不作为字段存在。请注意,这是 OrderItem 模型,而不是 Order 模型。
  • 这是我的订单商品模型 OrderItem(models.Model): item = models.ForeignKey(Item, on_delete=models.CASCADE) quantity = models.IntegerField(default=1) def __str__(self) : return f"{self.item.quantity} of {self.item.title}"

标签: javascript python html css django


【解决方案1】:

您正在尝试在 OrderItem 模型上执行 get_or_create。但是,此模型不包含字段 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)
    
    

    【讨论】:

    • 您好!所以......在答案中“只输入代码”是一种不好的做法。你能多加一点上下文吗?通常对你所做的事情做一个小小的解释就足够了。谢谢!
    • 好的spersico。我是新来的,但我确保我的客户命名与我在订单模型中使用的完全一致。这就是我在购物车功能中的views.py中使用的。当我订购或创建方法时。如果您在订单中调用的内容或在您查询的确切模型中未引用的创建方法,则可能会出现字段错误。谢谢兄弟指正。
    • 别担心,不客气。下次要考虑的事情:-)
    猜你喜欢
    • 2021-03-17
    • 2018-04-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-26
    • 2016-07-30
    • 2023-02-25
    • 2015-07-18
    • 2020-01-01
    相关资源
    最近更新 更多