【问题标题】:How do you test model field types in Django?如何在 Django 中测试模型字段类型?
【发布时间】:2020-06-17 16:52:57
【问题描述】:

我正在尝试测试一个字段是否实际上是主键。

class PatientTests(test.TestCase):
    def test_primary_key(self):
        # Cannot be NULL
        patient = models.Patients(patient_id=None)
        patient.save()

但是测试通过了,没有引发异常。

我的模型定义:

class Patients(models.Model):
    patient_id = models.CharField(max_length=12, primary_key=True)

使用 Django 3.0.7 版

【问题讨论】:

    标签: python sql django database testing


    【解决方案1】:

    这个MyModel._meta.pk.name会给你primary key的名字

    【讨论】:

    • 是的,现在如何使用简单的测试用例证明主键不会接受 NULL 值?
    • print(patient._meta.pk.name) 给出patient_id 所以这是正确的。
    【解决方案2】:

    无论出于何种原因,您的代码都会导致 Django 保存主键设置为空字符串 '' 的对象。在docs 中指出,Django 的约定是使用空字符串作为null。

    As they say,这是设计和记录的。此外,they have stated thatprimary_key=True 并不意味着blank=Falsenull=Falseunique=True,但是当我添加null=False 时它并没有帮助并且测试再次通过。我认为这将是一个问题,或者至少是 Django 的未定义行为。

    【讨论】:

    • 不不,Primary_key=True implies null=False and unique=True 来源:docs.djangoproject.com/en/3.0/ref/models/fields(更新的文档)那么为什么它允许保存空值?
    • @NoName 你确定你使用的是 Django 3.0 吗?但是,请更新您的问题,提及您的 Django 版本。
    • 我添加了它,我认为 Django 在幕后做了一些事情来主动防止将 NULL 值插入主键。不确定。
    • 希望社区有人回答这个问题。
    猜你喜欢
    • 2021-12-18
    • 2012-03-17
    • 1970-01-01
    • 1970-01-01
    • 2021-01-10
    • 2019-04-15
    • 2014-11-11
    • 2018-07-05
    • 1970-01-01
    相关资源
    最近更新 更多