Django测试TypeError: 字段'id'期望数字但得到()
我在代码中遇到了这个错误,已经出现了3次。我在其他问题中搜索过,但没有找到任何有效的解决办法。
有没有人知道该怎么解决?
谢谢大家。
models.py
class Exam(models.Model):
code = models.CharField(max_length=50)
name = models.CharField(max_length=100)
semester = models.IntegerField(default=1)
year = models.CharField(max_length=9)
users = models.ManyToManyField(User, blank=True)
def __init__(self, *args, **kwargs):
super().__init__(args, kwargs)
self.questions = None
test_models.py
class ExamModelTestCase(TestCase):
def setUp(self):
self.user = User.objects.create(username='test_user', first_name='Test', last_name='User')
self.exam = Exam.objects.create(code="EXAM1", name="Exam 1", semester=1, year="2024")
def test_exam_str_method(self):
self.assertEqual(str(self.exam), "EXAM1-Exam 1 2024 1")
错误信息
Found 12 test(s).
Creating test database for alias 'default'...
System check identified no issues (0 silenced).
.....EEEEEE.
======================================================================
ERROR: test_exam_str_method (examc_app.tests.test_models.ExamModelTestCase)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/lucile/examreview/venv/lib/python3.10/site-packages/django/db/models/fields/__init__.py", line 2053, in get_prep_value
return int(value)
TypeError: int() argument must be a string, a bytes-like object or a real number, not 'tuple'
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/home/lucile/examreview/examc_app/tests/test_models.py", line 9, in setUp
self.exam = Exam.objects.create(code="EXAM1", name="Exam 1", semester=1, year="2024")
TypeError: Field 'id' expected a number but got ().
1 个回答
0
我觉得你可以直接这样插入,不用通过ID。
self.exam = Exam.objects.create(id=1, code="EXAM1", name="Exam 1", semester=1, year="2024")
或者
self.exam = Exam.objects.create(code="EXAM1", name="Exam 1", semester=1, year="2024")