python - Django - 'ManyRelatedManager' 对象没有属性 'get_total_addon_price'
问题描述
在这里,我试图调用不同模型类的函数。当试图调用这个函数时,它会抛出一个错误,说“ManyRelatedManager”对象没有属性“get_total_addon_price”
在Cart(models.Model)
我试图调用get_total_addon_price
模型的功能AddonCartItem
def get_total(self):
c_cart_item = 0
a_cart_item = 0
cart_total = 0
if self.addon_item.get_total_addon_price != 0:
但它会引发错误
谁能帮我解决这个问题。我已经添加了完整models.py
的和error Traceback
models.py
class ComboCartItem(models.Model):
user = models.ForeignKey(User, null=True, blank=True, on_delete=models.CASCADE)
combo = models.ForeignKey(Combo, blank=True, null=True, on_delete=models.CASCADE)
quantity = models.IntegerField(default=1)
ordered = models.BooleanField(default=False)
def __str__(self):
return f"{self.quantity} of {self.combo.title}"
# return str(self.id)
def get_total_combo_price(self):
return self.quantity * self.combo.combo_regular_price
def get_total_combo_sale_price(self):
return self.quantity * self.combo.combo_sale_price
def get_amount_saved(self):
return self.get_total_combo_price() - self.get_total_combo_sale_price()
def get_final_price(self):
if self.combo.combo_sale_price:
return self.get_total_combo_sale_price()
return self.get_total_combo_price
class AddonCartItem(models.Model):
user = models.ForeignKey(User, null=True, blank=True, on_delete=models.CASCADE)
addon = models.ForeignKey(Addon, blank=True, null=True, on_delete=models.CASCADE)
quantity = models.IntegerField(default=1)
ordered = models.BooleanField(default=False)
addon_total = models.DecimalField(default=0.00, max_digits=100, decimal_places=2)
def __str__(self):
return f"{self.quantity} of {self.addon.name}"
# return str(self.id)
def get_total_addon_price(self):
addon_total = 0
addon_total = self.quantity * self.addon.price
self.addon_total = addon_total
self.save()
return self.quantity * self.addon.price
class Cart(models.Model):
user = models.ForeignKey(User, null=True, blank=True, on_delete=models.CASCADE)
combo_item = models.ManyToManyField(ComboCartItem, blank=True, null=True)
addon_item = models.ManyToManyField(AddonCartItem, blank=True, null=True)
ordered = models.BooleanField(default=False)
cart_total = models.DecimalField(default=0.00, max_digits=100, decimal_places=2)
objects = CartManager()
def __str__(self):
return str(self.id)
def get_total(self):
c_cart_item = 0
a_cart_item = 0
cart_total = 0
if self.addon_item.get_total_addon_price != 0:
for combo_cart_item in self.combo_item.all():
c_cart_item += combo_cart_item.get_final_price()
for addon_cart_item in self.addon_item.all():
a_cart_item += addon_cart_item.get_total_addon_price()
cart_total = c_cart_item + a_cart_item
self.cart_total = cart_total
self.save()
return cart_total
else:
for cart_item in self.combo_item.all():
cart_total += cart_item.get_final_price()
self.cart_total = cart_total
self.save()
return cart_total
Traceback
Internal Server Error: /carts/cart/
Traceback (most recent call last):
File "C:\lib\site-packages\django\core\handlers\exception.py", line 34, in inner
response = get_response(request)
File "C:\lib\site-packages\django\core\handlers\base.py", line 115, in
_get_response
response = self.process_exception_by_middleware(e, request)
File "C:\lib\site-packages\django\core\handlers\base.py", line 113, in
_get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "C:\monday\carts\views.py", line 12, in cart
return render(request, 'carts/cart-view.html', context)
File "C:\lib\site-packages\django\shortcuts.py", line 19, in render
content = loader.render_to_string(template_name, context, request, using=using)
File "C:\lib\site-packages\django\template\loader.py", line 62, in render_to_string
return template.render(context, request)
File "C:\lib\site-packages\django\template\backends\django.py", line 61, in render
return self.template.render(context)
File "C:\lib\site-packages\django\template\base.py", line 171, in render
return self._render(context)
File "C:\lib\site-packages\django\template\base.py", line 163, in _render
return self.nodelist.render(context)
File "C:\lib\site-packages\django\template\base.py", line 936, in render
bit = node.render_annotated(context)
File "C:\lib\site-packages\django\template\base.py", line 903, in render_annotated
return self.render(context)
File "C:\lib\site-packages\django\template\loader_tags.py", line 150, in render
return compiled_parent._render(context)
File "C:\lib\site-packages\django\template\base.py", line 163, in _render
return self.nodelist.render(context)
File "C:\lib\site-packages\django\template\base.py", line 936, in render
bit = node.render_annotated(context)
File "C:\lib\site-packages\django\template\base.py", line 903, in render_annotated
return self.render(context)
File "C:\lib\site-packages\django\template\loader_tags.py", line 62, in render
result = block.nodelist.render(context)
File "C:\lib\site-packages\django\template\base.py", line 936, in render
bit = node.render_annotated(context)
File "C:\lib\site-packages\django\template\base.py", line 903, in render_annotated
return self.render(context)
File "C:\lib\site-packages\django\template\defaulttags.py", line 309, in render
return nodelist.render(context)
File "C:\lib\site-packages\django\template\base.py", line 936, in render
bit = node.render_annotated(context)
File "C:\lib\site-packages\django\template\base.py", line 903, in render_annotated
return self.render(context)
File "C:\lib\site-packages\django\template\base.py", line 986, in render
output = self.filter_expression.resolve(context)
File "C:\lib\site-packages\django\template\base.py", line 670, in resolve
obj = self.var.resolve(context)
File "C:\lib\site-packages\django\template\base.py", line 795, in resolve
value = self._resolve_lookup(context)
File "C:\lib\site-packages\django\template\base.py", line 857, in _resolve_lookup
current = current()
File "C:\monday\carts\models.py", line 94, in get_total
if self.addon_item.get_total_addon_price != 0:
AttributeError: 'ManyRelatedManager' object has no attribute 'get_total_addon_price'
[22/May/2020 20:43:38] "GET /carts/cart/ HTTP/1.1" 500 172420
解决方案
推荐阅读
- javascript - 在 OpenUI5-App 中导入 Leaflet-Library
- azure-devops - 注册到环境时标记资源
- react-apollo - 如何使用 reactjs @apollo/client v3 获取所有缓存数据
- android - 是否可以在 Windows 10 中安装 IOS 模拟器?
- forms - 防止 Powershell GUI 关闭
- javascript - 对 NaN 感到困惑 - HTML CANVAS JS
- laravel - 在 laravel 'created' 事件中获取新创建的 id
- vue.js - Vue和Vuetify中未出现错误消息
- java - Concat Flux 及其计数(或另一个 reduce 函数)
- java - 使用 google cloud run 部署 pub/sub spring 应用程序