从具有一对多关系的 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)