0

このコードを使用して Db にクエリを実行してみました。

Makesite.objects.values_list('ref_id', flat =True)

[1,2,None] を返しました。これはやや紛らわしいことがわかりました。私は、python がインスタンスに割り当てるだけの番号ではなく、独自の名前でインスタンスを保存したと想定しました。コードのヘルプや、python が名前ではなく数字として保存する理由についての説明は、すばらしい感謝です。

models.py で

class Makesite(models.Model):
    sitename = models.CharField(max_length=100, unique = True) 
    siteinfo = models.ManyToManyField(Siteinfo)
    ref_id = models.ManyToManyField(RefID)
    report = models.ManyToManyField(Report)
4

1 に答える 1

1

Django は m2m を「名前」で保存しません。主キー(あなたの場合は整数)を使用します。DBテーブルを表示することで確認できます。

makesite.sitenameDjangoのようなものを使用すると、サイト名インスタンスを取得するために別のクエリが作成されます。

しかし、使用するvalues_list場合、余分なクエリや結合が必要ないため、Django は単一のテーブルからデータを返します。そして、そこから取得できるのは主キーだけです。

関連するクエリを最適化したい場合は、select_related / prefetch_relatedメソッドを参照するか、キャッシュを使用してください。

于 2012-05-11T08:01:42.083 に答える