从具有一对多关系的 Django 表中查询相关字段
Querying related fields from Django Tables with One to Many Relationship
我只是在探索如何使用 Django,我在我的 Django 应用程序中创建了两个模型。
from django.db import models
#first model
class Person(models.Model):
name = models.CharField(max_length=40)
email = models.CharField(max_length=100)
title = models.CharField(max_length=100)
image = models.CharField(max_length=200)
def __str__(self):
return self.name
#second model
class Skill(models.Model):
person = models.ForeignKey(Person)
skill = models.CharField(max_length=60)
years = models.CharField(max_length=40)
def __str__(self):
return self.skill, self.person
第一个模型是Person,第二个模型是Skill。现在的关系是每个人都会有很多技能。
现在我可以用数据更新数据库,网站的管理部分也可以正常工作。
在 Django Shell 上,我尝试 运行 命令:
Skill.object.all()
我得到的是以下错误:
Traceback (most recent call last):
File "<console>", line 1, in <module>
File "C:\Program Files (x86)\Python36-32\lib\site-packages\django\db\models\query.py", line 235, in __repr__
return '<QuerySet %r>' % data
File "C:\Program Files (x86)\Python36-32\lib\site-packages\django\db\models\base.py", line 572, in __repr__
u = six.text_type(self)
TypeError: __str__ returned non-string (type tuple)
或者如果我尝试命令:
Skill.objects.get(pk=1)
我得到:
Traceback (most recent call last):
File "<console>", line 1, in <module>
File "C:\Program Files (x86)\Python36-32\lib\site-packages\django\db\models\base.py", line 572, in __repr__
u = six.text_type(self)
TypeError: __str__ returned non-string (type tuple)
但是,如果我 运行 一个命令,例如:
Skill.objects.get(skill='Photoshop').person.name
我得到有技能的人的名字"Photoshop."
我想了解我在这里做错了什么;也许我不应该这样用外键查询 table ?或者我做错了什么。
好吧,最后我想查询的是,我想找到具有给定名称或主键的Person的所有技能。
__str__
应该 return 一个 str
。所以改变这样的东西
return self.skill, self.person
到
return "%s-%s" %(self.skill, self.person.name)
您的 __str__
方法 return 是一个元组(self.skill、self.person),它必须 return 那些对象的 str 表示。为了实现这一点,改变:
return self.skill, self.person
至
return "{}, {}".format(self.skill, self.person)
我只是在探索如何使用 Django,我在我的 Django 应用程序中创建了两个模型。
from django.db import models
#first model
class Person(models.Model):
name = models.CharField(max_length=40)
email = models.CharField(max_length=100)
title = models.CharField(max_length=100)
image = models.CharField(max_length=200)
def __str__(self):
return self.name
#second model
class Skill(models.Model):
person = models.ForeignKey(Person)
skill = models.CharField(max_length=60)
years = models.CharField(max_length=40)
def __str__(self):
return self.skill, self.person
第一个模型是Person,第二个模型是Skill。现在的关系是每个人都会有很多技能。
现在我可以用数据更新数据库,网站的管理部分也可以正常工作。
在 Django Shell 上,我尝试 运行 命令:
Skill.object.all()
我得到的是以下错误:
Traceback (most recent call last):
File "<console>", line 1, in <module>
File "C:\Program Files (x86)\Python36-32\lib\site-packages\django\db\models\query.py", line 235, in __repr__
return '<QuerySet %r>' % data
File "C:\Program Files (x86)\Python36-32\lib\site-packages\django\db\models\base.py", line 572, in __repr__
u = six.text_type(self)
TypeError: __str__ returned non-string (type tuple)
或者如果我尝试命令:
Skill.objects.get(pk=1)
我得到:
Traceback (most recent call last):
File "<console>", line 1, in <module>
File "C:\Program Files (x86)\Python36-32\lib\site-packages\django\db\models\base.py", line 572, in __repr__
u = six.text_type(self)
TypeError: __str__ returned non-string (type tuple)
但是,如果我 运行 一个命令,例如:
Skill.objects.get(skill='Photoshop').person.name
我得到有技能的人的名字"Photoshop."
我想了解我在这里做错了什么;也许我不应该这样用外键查询 table ?或者我做错了什么。
好吧,最后我想查询的是,我想找到具有给定名称或主键的Person的所有技能。
__str__
应该 return 一个 str
。所以改变这样的东西
return self.skill, self.person
到
return "%s-%s" %(self.skill, self.person.name)
您的 __str__
方法 return 是一个元组(self.skill、self.person),它必须 return 那些对象的 str 表示。为了实现这一点,改变:
return self.skill, self.person
至
return "{}, {}".format(self.skill, self.person)