我的models.py
中有这位经理class ItemManager(models.Manager):
def get_fee(self):
from django.db import connection
cursor = connection.cursor()
cursor.execute("""
SELECT fee
FROM item
WHERE itemID = %d AND item.type = %d
""", [self.myItemID, self.myItemType])
fee = cursor.fetchone()
return fee
和班级
Sample(models.Model):
sampleID = models.AutoField(primary_key=True)
itemID = models.ForeignKey(Item)
item.type = models.ForeignKey(Item)
...
def save(self, *args, **kwargs):
is_new = self.pk is None
super(Sample, self).save(*args, **kwargs)
if is_new:
cd.amount = MonthlyFeeManager()
cd.save()
然后产生错误:
Cannot convert <myapp.models.ItemManager object at 0xa6f07ec> to Decimal
通常,我想在管理器中执行RAW SQL查询,并使用它来从查询中获取结果。我试图搜索,但大多数返回是元组,而不是值。
答案 0 :(得分:1)
这不是您使用经理的方式。即使有一个完全正常的类实例,你的尝试也不会给你你想要的东西:你需要实例化它并在实例上调用get_fee()
。
使用管理器,您不需要实例化它,因为已经为您完成了模型上的objects
属性。但是你仍然需要调用相关的方法:
cd.amount = Sample.objects.get_fee()
但是,此仍然无效。那是因为您引用了self.myItemId
和self.myItemType
,它们在Manager对象上不存在。这让我得出结论,你根本不需要一个Manager对象:你只需要一个标准的模型方法。并且也不需要原始SQL:使用普通模型查询语法可以很容易地表达您的代码。
(我无法准确地向您展示它的样子,因为你的例子中的ForeignKeys没有任何意义,并且不清楚fee
应该来自哪里。)