python - “ManyToManyField”的实例没有“全部”成员
问题描述
我正在尝试获取物品价格的总和。为此,我决定在我的 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
希望这些足以识别问题,也就是错误。帮助赞赏!
解决方案
我无法解决这个问题,但我创建了一个替代解决方案。在我的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)
推荐阅读
- python - 如何在 pytest 插件中需要固定装置?
- swiftui - SwiftUI:如何在纵向模式下锁定特定视图,同时允许其他人更改方向?
- sql-server - 无法从 Power BI 调用存储过程
- c# - 将参数传递给抽象类构造函数c#
- r - 替换 r 中的字符串模式
- google-apps-script - 包括已更改单元格的整行
- node.js - 运行示例测试时出现赛普拉斯错误。赛普拉斯崩溃并显示错误 ECONNRESET
- computational-geometry - 如何从 vtkMarchingSquares 获得定向轮廓
- cognos - Cognos 图 - 根据不同维度的值指定样式
- rabbitmq - Spring streamBridge 在启动时创建rabbitmq队列