首页 > 解决方案 > 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

标签: pythondjangodjango-models

解决方案


推荐阅读