如果初始 makemigrations 的一部分,使用针对查询集的选择的 Django 表单会导致错误

2023-12-06

我想了解此问题的最佳实践。

我有一个 Django 表单,其中包含以下内容:

class AdvancedSearchForm(forms.Form):
    CATEGORY_OPTIONS = Category.objects.all().order_by('parent_id','primary')

    categoryAS = forms.ChoiceField(
        widget = forms.Select(attrs={'class': 'form-control',
                                     'onchange' : 'changeCategory("id_categoryAS");'}),
        label = '',
        required = False,
        choices = ((x.id, x.primary) for x in CATEGORY_OPTIONS),
        )

如果这是第一个makemigrations我运行的项目总是发现我收到一条错误消息告诉我Cateogry.parent_id不存在。为了运行它,我需要注释掉选择行,运行makemigrations and migrate然后取消注释选择行。

这是标准做法还是我应该遵循什么做法以确保它第一次起作用。

Thanks


在 Django 1.8+ 中,您可以使用可调用选项。

def get_choices():
    return ((x.id, x.primary) for x in AdvancedSearchForm.CATEGORY_OPTIONS),

class AdvancedSearchForm(forms.Form):
    CATEGORY_OPTIONS = Category.objects.all().order_by('parent_id','primary')

    categoryAS = forms.ChoiceField(choices=get_choices)

The get_choices方法在视图中创建表单时运行,而不是在加载模块时运行。这意味着您在运行初始迁移时不会遇到任何问题。

有时,可以使用ModelChoice代替ChoiceField。在表单初始化之前不会评估查询集,因此在运行初始迁移时不会遇到任何问题。

class AdvancedSearchForm(forms.Form):
    CATEGORY_OPTIONS = Category.objects.all()

    categoryAS = forms.ModelChoiceForm(choices=CATEGORY_OPTIONS)

您甚至可以通过子类化并覆盖来自定义模型选择字段的标签label_from_instance.

from django import forms

class MyModelChoiceField(forms.ModelChoiceField):
    def label_from_instance(self, obj):
        return self.primary

class AdvancedSearchForm(forms.Form):
    CATEGORY_OPTIONS = Category.objects.all()

    categoryAS = MyModelChoiceForm(choices=CATEGORY_OPTIONS)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如果初始 makemigrations 的一部分,使用针对查询集的选择的 Django 表单会导致错误 的相关文章

  • Django all-auth:如何禁用通过 Google 自动登录

    我正在使用 django allauth 包通过 Google API 让用户登录到我的 Django 应用程序 我的问题是 当用户通过外部 Google 登录页面成功登录时 每次他注销并想要再次登录时 django allauth 都会自
  • 如何使用 javascript/jquery/AJAX 调用 Django REST API?

    我想使用 Javascript jQuery AJAX 在前端调用 Django Rest API 请求方法是 POST 但当我看到 API 调用它的调用 OPTIONS 方法时 所以 我开始了解access control allow o
  • Django Rest Framework 删除 csrf

    我知道有关于 Django Rest Framework 的答案 但我找不到解决我的问题的方法 我有一个具有身份验证和一些功能的应用程序 我向其中添加了一个新应用程序 它使用 Django Rest Framework 我只想在这个应用程序
  • 将 python 字典中的数据呈现给 django 模板。

    我有一本字典 data sok 1 10 sao 1 10 sok sao 2 20 我如何 循环字典 将我的数据作为 HTML 表呈现给 Django 模板 这种格式为表格 author qty Amount sok 1 10 sao 1
  • 测试使用 South 迁移的 Django 应用程序

    我正在尝试为使用 South 迁移的 Django 应用程序创建一些功能测试 最终 我还将创建斜纹测试 当我尝试运行现有测试时 由于南方迁移出现问题 测试数据库未成功创建 58 次迁移中的第 7 次失败 看起来 为了测试的目的 最好从 Dj
  • Django REST Framework ManyToMany 过滤多个值

    我有两个模型 一个定义用户 另一个定义这些用户的标签 我正在使用 Django REST Framework 创建 API 我希望能够查询至少包含标签 id 1 和 2 的用户 例如 如果用户的标签是 1 2 1 2 3 2 3 1 3 我
  • Django REST Framework:何时创建超链接资源以及何时创建嵌套资源?如何发布嵌套资源?

    我正在使用 Django REST 框架构建 REST Web API 事情进展顺利 但我偶然发现了嵌套资源的问题 起初 REST API 中的所有关系都是超链接的 例如 一篇文章看起来像这样 path http api myproject
  • 如何从 Django 管理界面禁用“最近操作”小部件?

    我不想展示最近的操作小部件在 django 管理站点中 我不知道如何完成此操作 你可以覆盖admin index html禁用显示的模板 有 您可能想要更改 删除的侧边栏块 有条件地启用或禁用操作 ModelAdmin get action
  • Django 的内联管理:一个“预填充”字段

    我正在开发我的第一个 Django 项目 我希望用户能够在管理中创建自定义表单 并向其中添加字段当他或她需要它们时 为此 我在我的项目中添加了一个可重用的应用程序 可在 github 上找到 https github com stephen
  • 如何通过 TLS 1.2 运行 django runserver

    我正在本地 Mac OS X 机器上测试 Stripe 订单 我正在实现这段代码 stripe api key settings STRIPE SECRET order stripe Order create currency usd em
  • Django-tables2 列总计

    我正在尝试使用此总结列中的所有值文档 https github com bradleyayers django tables2 blob master docs pages column headers and footers rst 但页
  • 导入错误:没有名为 django 的模块

    我使用的是centos Linux 我有 python 2 6 和 django 现在我升级到 python 2 7 Python 2 6 位于 usr lib python2 6 Python 2 7 位于 usr local lib p
  • 巩固 Django 南迁移

    在我的项目的初始阶段 我对模型进行了很多更改 因此我最终为我的应用程序生成了很多向南迁移 在转到我的生产服务器执行迁移之前 是否可以以任何方式整合它们 这样我就不会为每个应用程序进行一百万次迁移 如果是这样 我该怎么做呢 您始终可以删除现有
  • 用于渲染 html 子集的 Django templatetag

    我有一些 html 在本例中是通过 TinyMCE 创建的 我想将其添加到页面中 但是 出于安全原因 我不想只打印用户输入的所有内容 有谁知道模板标签 最好是过滤器 只允许呈现 html 的安全子集 我意识到 Markdown 和其他人就是
  • Django 2、python 3.4 无法解码 urlsafe_base64_decode(uidb64)

    我正在尝试通过电子邮件激活用户 电子邮件有效 编码有效 我使用了 django1 11 中的方法 该方法运行成功 在 Django 1 11 中 以下内容成功解码为 28 其中 uidb64 b Mjg force text urlsafe
  • Django - 使用“@api_view”将 Django Rest Swagger 架构添加到 DRF 标记函数

    Django 如何将 swagger 自动模式添加到 DRF 标记函数 api view 我有这个功能 view py api view POST swagger auto schema request body PostSerialize
  • Django 将 JSON 数据传递给静态 getJSON/Javascript

    我正在尝试从 models py 中获取数据并将其序列化为views py 中的 JSON 对象 模型 py class Platform models Model platformtype models CharField max len
  • Django 站点框架初始设置

    我对相当一维的 Django 实现很满意 但现在尝试了解具有共享内容的多站点过程 我已经阅读了 Django 站点框架和有关该主题的许多帖子 但我没有了解如何启动使用相同数据库但以单独域名呈现的第二个站点的基础知识 我有一个非常愉快且按规矩
  • Django 模型继承、重写字段

    我正在阅读 Python Web Development with Django 一书 我在书中找到了这个例子 class Book models Model title models CharField max length 100 ge
  • 具有自定义值的 Django 管理外键下拉列表

    我有 3 个 Django 模型 class Test models Model pass class Page models Model test models ForeignKey Test class Question model M

随机推荐