表单中的多项选择字段在重置数据库时引发异常

Posted

技术标签:

【中文标题】表单中的多项选择字段在重置数据库时引发异常【英文标题】:A multiple choice field in a form is throwing exception on resetting database 【发布时间】:2017-09-15 15:10:30 【问题描述】:

我在重置数据库时遇到了一个奇怪的问题。表单中的多选字段正在引发异常

.wrapper 在 0x7f59df160510 > 启动的线程中未处理的异常 回溯(最近一次通话最后): 文件“/home/abdullah/PycharmVirtualEnvs/venv/lib/python3.5/site-packages/django/db/backends/utils.py”,第 64 行,在执行 返回 self.cursor.execute(sql, params) 执行中的文件“/home/abdullah/PycharmVirtualEnvs/venv/lib/python3.5/site-packages/django/db/backends/sqlite3/base.py”,第 337 行 返回 Database.Cursor.execute(self, query, params) sqlite3.OperationalError:没有这样的表:app1_semester 上述异常是以下异常的直接原因: 回溯(最近一次通话最后): …… 文件“/home/abdullah/PycharmProjects/langs-dept/project1/app1/urls.py”,第 3 行,在 从 。导入视图 文件“/home/abdullah/PycharmProjects/langs-dept/project1/app1/views.py”,第 10 行,在 从 。导入模型、表格 文件“/home/abdullah/PycharmProjects/langs-dept/project1/app1/forms.py”,第 11 行,在 类 AddAssignmentForm(forms.Form): AddAssignmentForm 中的文件“/home/abdullah/PycharmProjects/langs-dept/project1/app1/forms.py”,第 14 行 queryset=models.AssignmentType.get_assignment_types(), 文件“/home/abdullah/PycharmProjects/langs-dept/project1/app1/models.py”,第 180 行,在 get_assignment_types return AssignmentType.objects.filter(semester=Semester.get_current_semester()) 文件“/home/abdullah/PycharmProjects/langs-dept/project1/app1/models.py”,第 157 行,在 get_current_semester 如果学期其他,则返回 term.first() 无 文件“/home/abdullah/PycharmVirtualEnvs/venv/lib/python3.5/site-packages/django/db/models/query.py”,第 260 行,在 __bool__ self._fetch_all() _fetch_all 中的文件“/home/abdullah/PycharmVirtualEnvs/venv/lib/python3.5/site-packages/django/db/models/query.py”,第 1087 行 self._result_cache = list(self.iterator()) 文件“/home/abdullah/PycharmVirtualEnvs/venv/lib/python3.5/site-packages/django/db/models/query.py”,第 54 行,在 __iter__ 结果 = compiler.execute_sql() 文件“/home/abdullah/PycharmVirtualEnvs/venv/lib/python3.5/site-packages/django/db/models/sql/compiler.py”,第 835 行,在 execute_sql cursor.execute(sql,参数) 文件“/home/abdullah/PycharmVirtualEnvs/venv/lib/python3.5/site-packages/django/db/backends/utils.py”,第 79 行,在执行 return super(CursorDebugWrapper, self).execute(sql, params) 文件“/home/abdullah/PycharmVirtualEnvs/venv/lib/python3.5/site-packages/django/db/backends/utils.py”,第 64 行,在执行 返回 self.cursor.execute(sql, params) 文件“/home/abdullah/PycharmVirtualEnvs/venv/lib/python3.5/site-packages/django/db/utils.py”,第 94 行,在 __exit__ 六.reraise(dj_exc_type,dj_exc_value,回溯) 文件“/home/abdullah/PycharmVirtualEnvs/venv/lib/python3.5/site-packages/django/utils/six.py”,第 685 行,在 reraise 提高 value.with_traceback(tb) 文件“/home/abdullah/PycharmVirtualEnvs/venv/lib/python3.5/site-packages/django/db/backends/utils.py”,第 64 行,在执行 返回 self.cursor.execute(sql, params) 执行中的文件“/home/abdullah/PycharmVirtualEnvs/venv/lib/python3.5/site-packages/django/db/backends/sqlite3/base.py”,第 337 行 返回 Database.Cursor.execute(self, query, params) django.db.utils.OperationalError:没有这样的表:app1_semester

如果我在 forms.py 中的一段代码下方评论,一切正常。

class AddAssignmentForm(forms.Form):
       assignments = forms.ModelMultipleChoiceField(widget=forms.CheckboxSelectMultiple(),queryset=models.AssignmentType.get_assignment_types(),required=False)

get_assignment_types() 方法是一个返回值列表的静态方法

models.py

 @staticmethod
    def get_assignment_types():
        return AssignmentType.objects.filter()

我可以评论该行并执行 python manage.py makemigrations,但我想知道有什么问题吗?有人能解释一下吗?

【问题讨论】:

【参考方案1】:

错误在这一行

AssignmentType.objects.filter(semester=Semester.get_current_semester())

您必须为模型 Semester 进行适当的迁移

【讨论】:

我正在重置数据库。,删除 db.sqlite3 并尝试第一次迁移 除了 init.py 之外,您还必须在每个应用程序的迁移文件夹中删除迁移文件 没错!解决了它。编辑您的回复以标记它

以上是关于表单中的多项选择字段在重置数据库时引发异常的主要内容,如果未能解决你的问题,请参考以下文章

如何分隔不同列中的多项选择短语(谷歌表单)?

在表单中的特定字段上引发 Django 中的错误

跟踪一系列简单的多项选择网络表单答案

枚举列laravel 8上的多项选择

如何使用流转换和块重置表单中的字段

将 Django 中的多对多关系表示为两个多项选择