gpt4 book ai didi

python - Django 单元测试,未知列错误

转载 作者:太空宇宙 更新时间:2023-11-03 18:58:21 25 4
gpt4 key购买 nike

我是 Django 初学者,正在熟悉它的使用,而且我也是单元测试的忠实信徒。

给定一个带有字段的示例数据库表contracts

parent_id  int
contract_num varchar
start_date date
end_date date
org_name varchar

我使用django_admin.pyspectdb>models.py定义了一个模型类

class Contracts(models.Model):
parent_id = models.IntegerField()
contract_num = models.CharField(max_length=10L, db_column='contract_num')
start_date = models.DateField()
end_date = models.DateField(null=True, blank=True)
org_name = models.CharField(max_length=100L, db_column='org_name')
class Meta:
db_table = 'contracts'

在测试类中,我定义了

def setUp(self):
self.contracts = Contracts(parent_id = 300, contract_num = "1234", start_date = timezone.now(), end_date = None, org_name = "TestContractName")


def test_contracts_access(self):
self.contracts.save()
getContracts = Contracts.objects.get(parent_id = 300)

self.assertEqual(getContracts.org_name, "TestContractName")
self.assertEqual(getContracts.contract_num, "1234")
self.assertEquals(getContracts.contract_num, "12")


getContracts.org_name = "TestContractNameUpdate"
getContracts.save()

updateContract = Contracts.objects.get(contract_num = "1234")
self.assertEqual(updateContract.org_name, "TestContractNameUpdate")

当我运行此测试时,我收到数据库错误 1054:“字段列表中的未知列contracts.id”。这到底是什么意思呢?堆栈跟踪中的第一个错误是第一次保存后的 get 调用。

事实是,我为另一个模型对象设置了完全相同的测试,并且该测试通过了。

最佳答案

确保检查数据库中设置的主键。如果您的主键位于未标记为“id”的字段上(我正在查看您 parent_id...),那么您需要在模型中进行设置。您可以通过以下方式执行此操作:

field_name = models.AutoField(primary_key=True)

如果您不这样做,那么 Django 将查找字段“id”,假设您有一个字段并且它是您的主键。我认为您收到此错误是因为它正在寻找不存在的 contracts.id!

查看 primary-key-fields 上的 Django 文档和 legacy databses

关于python - Django 单元测试,未知列错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16719545/

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