我正在学习如何使用 Django 使用 mysql 数据库。 我在 myapp.models 中创建了模型。我已将 ManyToManyField 添加到我的模型中。我已使用 makemigrations 和 migrate 应用对这些模型所做的更改。所有流程都正常。
但是,当我键入命令时,这个 ManyToManyField 没有显示在 Python shell 中:
>>> Employer._meta.fields
Employer 是我的模特的名字。我想在终端中打印该模型的所有字段。
当我输入这个命令时,除了这个 ManyToManyFiled 之外,我在终端中打印了 Employer 的字段。你能解释一下为什么吗?
(<django.db.models.fields.AutoField: id>, <django.db.models.fields.related.ForeignKey: employees>, <django.db.models.fields.CharField: name>, <django.db.models.fields.DateField: foundation_date>)
最佳答案
作为最佳实践并深入了解 django ORM 的工作原理和在调试情况下尝试在 python shell 中执行代码,并通过运行激活 virtualenv:
(e3.5) ⚙ user@ubuntu djangoproject$ python manage.py shell
为了从 Employer 的模型中获取对象,像这样将它导入到 shell 中:
>>> from company.models import Employer
创建模型实例并尝试获取雇主对象:
>>> emp = Employer.objects.get(id=1)
现在您可以像这样调用实例的任何列:
>>> emp.name
>>> 'Jackson'
对于分配给您的对象的 ManyToManyFields 关系,您可以调用它们:
>>> emp.tags.all()
<QuerySet [<Tag: computer>, <Tag: science>, <Tag: web>]>
如您所见,通过调用 ManyToManyField,您将获得一个包含所有 标签 的查询集;你可以
- 遍历它们
- 过滤查询
- 获取单个特定标签
在反面,您可以获得使用 标签 指定的 Employers,如下所示:
>>> from company.models import Tag
>>> b = Tag.objects.get(id=1)
>>> b
<Tag: computer>
>>> b.Employer_set
<django.db.models.fields.related_descriptors.create_forward_many_to_many_manager.<locals>.ManyRelatedManager object at 0x7f0a02bbceb8>
>>> b.Employer_set.all()
<QuerySet [<Employer: Jackson>]>
b.Employer_set.get(id=1)
<Employer: Jackson>
关于python - ManyToManyField 不显示在 Python shell 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48153473/