python - ManyToManyField 不显示在 Python shell 中

标签 python mysql django shell

我正在学习如何使用 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/

相关文章:

python - OpenCV视频未保存

使用正则表达式的 mysql 查询

mysql - Postgresql 中 ELT() 函数的替代方法是什么?

django - get_list_or_404 在 Django 中排序

python - Flask 的 UserMixin 在 Django 中的等价物是什么?

python - 导入错误 : No module named serial

Python:多维字典到数组

带有表别名的 MySQL INSERT

django - Celery 限速 : Is it possible to rate-limit a celery task differently based on a run-time parameter?

Python Scrapy - 从多个网站 URL 中抓取数据