gpt4 book ai didi

python - ManyToManyField 不显示在 Python shell 中

转载 作者:行者123 更新时间:2023-11-30 21:48:58 27 4
gpt4 key购买 nike

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

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com