从Django表中查询一对多关系的相关字段

从Django表中查询一对多关系的相关字段

问题描述:

我只是在探索如何解决Django问题,并且在我的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 

第一个模型是和第二模型是技能。现在关系如何是每个人都有很多技能。

现在我可以用数据更新数据库,网站的管理部分也可以正常工作。

在Django的壳,我尝试运行命令:

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。”

我想了解我在做什么错在这里;也许我不应该这样用外键查询表?或者,也许我做错了什么。

那么,最后我想查询的是,我想找到具有给定名称或主键的人的所有技能。

+1

你确定上面的代码复制粘贴?在返回self.skill结束时是否有'逗号'?然后查询是'Person.objects.get(id =“id”)。skill_set.all()' – itzMEonTV

+0

是代码复制粘贴,并且没有在'return self.skill'结尾处没有逗号:( –

+0

@itzmeontv我很抱歉有一个逗号,实际上我已经删除了逗号并尝试了,但是我猜这个更改并不适用,直到我退出shell并且重新启动它,我想简单地保存文件就足够了。反正我已经更新了代码,它是如何用逗号。 –

__str__应返回str。所以改变这样的事情

return self.skill, self.person 

return "%s-%s" %(self.skill, self.person.name) 
+0

哦,谢谢你,我只是想问,如果我不得不保留个人信息,我该如何解决。 –

__str__方法返回一个元组(self.skill,self.person),它必须返回这些对象的STR表示。为了实现这个目标,转变:

return self.skill, self.person 

return "{}, {}".format(self.skill, self.person) 
+0

谢谢你解释,现在我明白了:) –

+0

好运探索Django :) –