【发布时间】:2017-03-07 09:07:12
【问题描述】:
我只是在探索如何使用 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”的人的名字。
我试图了解我在这里做错了什么;也许我不应该以这种方式使用外键查询表?或者我做错了什么。
嗯,最后我想查询的是,我想找到具有给定名称或主键的人的所有技能。
【问题讨论】:
-
你确定上面的代码是复制粘贴的吗?
return self.skill末尾有comma吗?那么查询是Person.objects.get(id="id").skill_set.all() -
是的代码是复制粘贴的,不是
return self.skill末尾没有逗号:( -
@itzmeontv 我很抱歉有一个逗号,实际上我已经删除了逗号并尝试了,但我想更改不适用,直到我退出 shell 并重新启动它,我想只是保存文件就足够了。无论如何,我已经用逗号更新了代码。
-
所以我现在将
return self.skill, self.person更改为return self.skill并且它工作正常
标签: django python-3.x python-3.6