';超级';对象没有属性';对象';Python Django

';超级';对象没有属性';对象';Python Django,python,django,Python,Django,您需要使用get\u related\u filter类方法获取filter 视图 modelPath = 'Money.models' app_model = importlib.import_module(modelPath) cls = getattr(app_model, 'Money') related_result = cls().get_related_filter(search_query='search_query') 型号.py class Money(models.Mod

您需要使用
get\u related\u filter
类方法获取
filter

视图

modelPath = 'Money.models'
app_model = importlib.import_module(modelPath)
cls = getattr(app_model, 'Money')
related_result = cls().get_related_filter(search_query='search_query')
型号.py

class Money(models.Model):
    money = models.DecimalField(max_digits=19, blank=True, default=0, decimal_places=2)   

    def get_related_filter(self, **kwargs):
        results = super(Money, self).objects.filter(Q(money__icontains=kwargs['search_query']))
        return results

    def __str__(self):
        return self.money

为什么给
“super”对象没有属性“objects”Python Django
,并且不返回
filter
使用
super(Money,self)
没有意义,原因有二:

  • 此代理对象将解析为
    模型
    ,但
    模型
    或其父对象具有
    对象
    属性;及
  • 即使是这样,您也只能访问模型类上的
    .objects
    ,而不能访问实例
  • 因此,您可以使用以下选项进行筛选:

    class Money(models.Model):
        money = models.DecimalField(max_digits=19, blank=True, default=0, decimal_places=2)   
    
        def get_related_filter(self, search_query, **kwargs):
            return Money.objects.filter(money__icontains=search_query)
    
        def __str__(self):
            return str(self.money)
    class Money(models.Model):
    money=models.DecimalField(最大位数=19,空格=True,默认值=0,小数位数=2)
    def get_相关过滤器(自我、搜索查询、**kwargs):
    返回Money.objects.filter(Money\u icontains=search\u query)
    定义(自我):
    返回str(self.money)

    \uuuu str\uuuuu
    也应该返回字符串,而不是十进制,因此您应该返回
    str(self.money)
    ,而不是
    self.money

    为什么不直接使用
    money.objects.filter(…)
    。该错误意味着
    Money
    的超类,
    Model
    没有
    对象
    。models.Money类是否具有名为“objects”的属性?我猜不是。@NicholasHunter:是的,因为只要您不指定其他管理器,
    Model
    ModelBase
    )的元类将填充该类。