0

私は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 クエリを実行し、それを使用してクエリから結果を取得したいと考えています。検索しようとしましたが、ほとんどの戻り値は値ではなくタプルです。

4

1 に答える 1

1

これはマネージャーの使い方ではありません。完全に通常のクラス インスタンスを使用しても、意図したとおりの結果は得られません。インスタンス化しget_fee()てインスタンスを呼び出す必要があります。

objectsマネージャーを使用すると、モデルの属性として既にインスタンス化されているため、インスタンス化する必要はありません。ただし、関連するメソッドを呼び出す必要があります。

cd.amount = Sample.objects.get_fee()

ただし、これはまだ機能しません。これは、 Manager オブジェクトに存在しないself.myItemIdおよびを参照したためです。self.myItemTypeこれにより、Manager オブジェクトはまったく必要ないという結論に至りました。必要なのは、標準モデル メソッドだけです。また、生の SQL も必要ありません。コードは、通常のモデル クエリ構文を使用して完全に簡単に表現できます。

fee(あなたの例のForeignKeysは意味がなく、どこから来ているのかはっきりしないので、それがどのように見えるかを正確に示すことはできません。)

于 2012-09-30T16:05:59.320 に答える