如何解决Django 测试 __str__(self) for ForeignKey
所以我的班级中有这个外键地址:
class Adresse(models.Model):
place = models.ForeignKey('Place',on_delete = models.CASCADE)
def __str__(self):
return self.place.city
外键来自模型位置:
class Place(models.Model):
city = models.CharField(max_length = 100)
def __str__(self):
return self.city
当我运行服务器时,一切都按预期工作,我的地址从另一个类返回外键。 我想知道如何为此编写测试,到目前为止,我的 test_models.py 文件如下所示:
class TestForeignKey(TestCase):
def test_adress_str(self):
testing_city = Adresse.objects.create(place.city = 'London')
self.assertEqual(str(testing_city),'London')
但我收到此错误:
Traceback (most recent call last):
File "/tests/test_models.py",line 8,in test_adress_str
testing_city = Adress.objects.create(city = 'London')
File "venv/lib/python3.9/site-packages/django/db/models/manager.py",line 85,in manager_method
return getattr(self.get_queryset(),name)(*args,**kwargs)
File "/venv/lib/python3.9/site-packages/django/db/models/query.py",line 445,in create
obj = self.model(**kwargs)
File "/Users/jmihretab/Desktop/TEST/venv/lib/python3.9/site-packages/django/db/models/base.py",line 501,in __init__
raise TypeError("%s() got an unexpected keyword argument '%s'" % (cls.__name__,kwarg))
TypeError: Adress() got an unexpected keyword argument 'city'
有人可以帮忙吗?
解决方法
Django 无法仅通过您编写的方式神奇地创建 Place
的实例:
Adresse.objects.create(place.city = 'London')
事实上,这甚至不是有效的语法。您需要显式地创建一个 Place
自己的实例并分配它:
class TestForeignKey(TestCase):
def test_adress_str(self):
place = Place.objects.create(city='London')
testing_city = Adresse.objects.create(place=place)
self.assertEqual(str(testing_city),'London')
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。