18

したがって、Djangoを既存のデータベースに正常に接続し(検査、検証、同期)、アプリとプロジェクトを作成しました(Djangoの本を読んでいて、第5章にいます)。しかし、実際に実行して印刷すると、(想定される)エラーが発生します。Pythonを使用している間、必要なものを適切にインポートします(from myapp.models import Artist)が、たとえば、テーブルの最初の5行を印刷しようとすると(print Artist.objects.all()[:5])、次のようになります。

[<Artist: Artist object>, <Artist: Artist object>, <Artist: Artist object>, <Artist: Artist object>, <Artist: Artist object>]

プレースホルダーのように見える値ではなく、実際に値を出力しないのはなぜですか?ここに欠けているものはありますか?

4

3 に答える 3

27

Djangoは、Pythonオブジェクトとデータベース行の間でデータを相互に変換するORM(Object-Relational Mapper)を使用します。したがって、これを使用してデータベースからアイテムを取得すると、Pythonオブジェクトに変換されます。

そのオブジェクトがそれ自体をテキストとして表示する方法を定義していない場合、Djangoがそれを行います。Pythonは同じことをします:

>>> class MyObject(object):
...     pass
... 
>>> [MyObject(), MyObject()]
[<__main__.MyObject object at 0x0480E650>,
 <__main__.MyObject object at 0x0480E350>]

各オブジェクトの行の実際の値をすべて表示する場合は、を使用しますvalues

ドキュメントの例を次に示します。

# This list contains a Blog object.
>>> Blog.objects.filter(name__startswith='Beatles')
[<Blog: Beatles Blog>]

# This list contains a dictionary.
>>> Blog.objects.filter(name__startswith='Beatles').values()
[{'id': 1, 'name': 'Beatles Blog', 'tagline': 'All the latest Beatles news.'}]
于 2012-04-14T01:45:15.620 に答える
7

更新:Python 3.xでは__str__代わりにを使用してください__unicode__

表示されているのは、Artistモデルインスタンスのリストです。値はPythonオブジェクトにあります。これらのインスタンスの表現をより役立つものにしたい場合は、__unicode__それらが何か有用なものを印刷するためのメソッドを定義する必要があります。

https://docs.djangoproject.com/en/dev/ref/models/instances/?from=olddocs#unicode

プレースホルダーではなく、実際のオブジェクトの表現であり、ユニコードに変換されます。

于 2012-04-14T01:46:08.427 に答える
0

印刷メソッドを使用する場合は、モデル自体でユニコードメソッドを使用してください

 def __unicode__(self):
    return u'%s' % (self.id)

ここにサンプルモデル

class unit(models.Model):
id = models.AutoField(primary_key=True)
name = models.CharField(max_length=255)
def __unicode__(self):
    return u'%s' % (self.name)

print(unit.objects.all())
[unit: KG, unit: PCs]
于 2012-04-14T15:42:52.220 に答える