【问题标题】:Instance of 'ManyToManyField' has no 'all' member“ManyToManyField”的实例没有“全部”成员
【发布时间】:2020-07-21 17:04:52
【问题描述】:

我正在尝试获取商品价格的总和。为此,我决定在我的 models.py 中的 Order 类中创建一个方法

def get_order_total(self):
    return sum([itemz.item.price for itemz in self.items.all()])

当我尝试访问该方法时,我收到此错误“'ManyToManyField' 的实例没有'所有'成员”。我的完整订单课程:

class Order(models.Model):
      STATUS = (
            ('Pending', 'Pending'),
            ('Out for delivery', 'Out for delivery'),
            ('Delivered', 'Delivered'),
        )
      order_head = models.ForeignKey(order_header, blank=False, null=True, on_delete=models.SET_NULL)
      items = models.ManyToManyField(OrderItem)
      Quantity = models.CharField(max_length=100)
      date_created = models.DateTimeField(auto_now_add=True, null=True)
      total = models.CharField(max_length=100)
      status = models.CharField(max_length=200, null=True, choices=STATUS)

      def get_order_items(self):
          return self.items.all()

      def get_order_total(self):
          return sum([itemz.item.price for itemz in self.items.all()])

      def __str__(self):
          return '{self.order_head}'.format(self=self)

相关模型:

     class order_header(models.Model):
           date_created = models.DateTimeField(auto_now_add=True, null=True)
           Seller = models.CharField(max_length=100, blank=False, default="Seller")
           Type = models.CharField(max_length=100, default="cash")
           Client = models.ForeignKey(customer, blank=True, null=True, on_delete=models.SET_NULL)
           Note = models.CharField(max_length=100, blank=True, default="Discount: ")
           Order_Id = models.IntegerField(primary_key=True, default=random, editable=False)

           def __str__(self):
               return 'Order Id: {self.Order_Id}'.format(self=self)


     class item(models.Model):
          name = models.CharField(max_length=100, blank=False)
          box_quantity = models.CharField(max_length=10)
          Quantity_in_box = models.CharField(max_length=10)
          code = models.CharField(max_length=15)
          price = models.CharField(max_length=100)
          expiry = models.CharField(max_length=100)
          supplier = models.ForeignKey(supplier, blank=False, null=True, on_delete=models.SET_NULL)
          warehouse = models.ForeignKey(warehouse, blank=False, null=True, on_delete=models.SET_NULL)
          category = models.ForeignKey(category, blank=False, null=True, on_delete=models.SET_NULL)
          date_created = models.DateTimeField(auto_now_add=True, null=True)

          def __str__(self):
              return self.name
    
    class OrderItem(models.Model):
         item = models.OneToOneField(item, on_delete=models.SET_NULL, null=True)
         quantity = models.IntegerField(default=1)

         def __str__(self):
             return self.item.name

希望这些足以识别问题,也就是错误。感谢帮助!

【问题讨论】:

  • 您应该使用_set 语句而不是它。见docs

标签: python python-3.x django django-models


【解决方案1】:

我无法解决问题,但我创建了一个替代解决方案。在我的views.py中,在相关视图中我做了以下满足我的需求,但不是我渴望知道我犯的错误,如果有人能在models.py中指出我的错误,那将是惊人的。

def Order1(request, pk):
    order_head = order_header.objects.get(Order_Id=pk)
    orders = order_head.order_set.all()
    total = 0
    for order in orders:
        for item in order.items.all():
            total += item.item.price 
    context = {
             'order_head': order_head,
             'orders': orders,
             'total': total,
         }
return render(request, 'Inventory_Management/order.html', context)

【讨论】:

    猜你喜欢
    • 2020-05-05
    • 2019-05-27
    • 2020-12-04
    • 1970-01-01
    • 2021-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-22
    相关资源
    最近更新 更多