【问题标题】:Creating models/database Django FK创建模型/数据库 Django FK
【发布时间】:2020-09-11 09:08:51
【问题描述】:

我是一名 ICT 学生,目前正在制作一个简单的 web 应用程序。我没有使用 python 和 django 的经验,所以我有点挣扎。

我在 Linux Kali VM 中有一个正在运行的空 MARIADB。

我已经从我的网络应用程序中以视觉范式制作了 ERD。我导出了 .dll 并在 MySQL 工作台中创建了数据库。我使用 inspectdb 为我的 models.py 导入 django/python 代码。

到目前为止一切顺利。

Django 提供了 User 模块,所以我没有创建自己的用户类 (auth_user)。

问题是:如何在我创建的名为“case”的类之间建立与 auth_user 类的关系?它要求一个默认的 FK 值,我不知道我的意思......我到处搜索,但只是“不明白”。

  • “类案例”我想设置与用户类的关系。说明:用户可以创建一个或多个案例。
  • “类项目”。一个案例可以有或多个项目(正在调查中)。

我在使用 Case 声明类项中的 FK 时收到的错误:

“您正在尝试在没有默认值的情况下向 gegevensdrager 添加不可为空的字段 'zaakid';我们不能这样做(数据库需要一些东西来填充现有的行)。

请选择一个修复:

1) 现在提供一次性默认值(将在所有现有行上设置此列的空值)

2) 退出,让我在 models.py 中添加一个默认值“

默认值!?我只想在 Class Item 中有一行引用 Case 主键 ID。我不知道默认应该是什么...

代码示例: 类案例(models.Model):

registratienummer = models.CharField(db_column='Registratienummer', unique=True, max_length=10, validators=[RegexValidator(r'^[0-9]{10}$')])

onderzoeksname = models.CharField(db_column='Onderzoeksnaam', blank=False, max_length=255)

Made_by = models.ForeignKey('AuthUser', db_column='Aangemaakt Door', null=True, on_delete=models.SET_NULL)

类项目(models.Model):

merk = models.CharField(db_column='Merk', max_length=255)

type = models.CharField(db_column='Type', max_length=255, blank=True, null=True)

serienummer = models.CharField(db_column='Serienummer', max_length=255, blank=False)

imei = models.CharField(db_column='IMEI', max_length=15, blank=True, null=True, validators=[RegexValidator(r'^[0-9]{15}$')])

#gegevensdrager_soortsocode = models.ForeignKey('GegevensdragerSoort', models.DO_NOTHING, db_column='Gegevensdrager_SoortSoCode') 

#zaakid = models.ForeignKey('Zaak', db_column='Zaak_referentie', on_delete=models.DO_NOTHING)

之后我尝试了 inspectdb > models.py。这可行,但我想添加约束等,但由于某种原因它不起作用。它给了我各种我无法解释的追溯。但首先,我的帖子足够长。希望有人能帮帮我,因为我现在压力很大。

诚挚的问候, 弗洛鲁斯。

【问题讨论】:

  • 您的数据库中是否已有案例项目?这可能是因为它需要为它们分配一个默认值,因为它们已经在数据库中。
  • 嗨,Brendon,是的,从 Django 本身导入用户类。其余的:没有。在我设置了一个新的数据库后,它引发了这些错误。我想测试,直接从 Django 创建数据库。此时我在 sql 工作台中创建了数据库。我没有添加用户类,因为 Django 给了我这些。但我无法将 auth_user 添加到案例和注释类中。关于如何做的任何提示?
  • 哦,可能是我先创建了两列 case... 然后想添加外键??
  • 这是我的想法,如果两个案例已经存在,它们没有与之关联的外键,所以它可能希望默认提供现有案例
  • 是的,就是这样。有时这是一个简单的答案。

标签: python mysql django-models


【解决方案1】:

如果数据库已经填充了数据并且您向该数据添加了一个新字段,那么 Django 需要为数据库中已有的数据分配一些东西。在这种情况下,您的数据还没有与之关联的外键,因此请求的默认值是程序应自动与先前数据关联的值。

如果您从数据库中删除数据,这应该会正常运行,或者您可以为其提供数据以填充这些案例并稍后手动更改。

【讨论】:

    猜你喜欢
    • 2018-07-31
    • 2015-08-27
    • 1970-01-01
    • 1970-01-01
    • 2023-03-09
    • 2019-03-09
    • 2011-10-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多