【问题标题】:Django test __str__(self) for ForeignKeyDjango 测试 __str__(self) 的 ForeignKey
【发布时间】:2021-07-22 15:55:17
【问题描述】:

所以我的班级中有这个 ForeignKey 地址

class Adresse(models.Model):
    place = models.ForeignKey('Place', on_delete = models.CASCADE)

    def __str__(self):
        return self.place.city

ForeignKey 来自模型Place

class Place(models.Model):
    city = models.CharField(max_length = 100)
    def __str__(self):
        return self.city

当我运行服务器时,一切都按预期工作,我的 Adress 从另一个类返回外键。 我想知道如何为此编写测试,到目前为止,我的 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'

谁能帮忙?

【问题讨论】:

  • 你能分享一下完整的回溯吗?
  • Adresse.objects.create(place.city = 'London') 这个有效的语法怎么样?你应该得到一些错误,比如SyntaxError: expression cannot contain assignment, perhaps you meant "=="?
  • @AbdulAzizBarkat 是的,你是对的,这实际上返回了一个 SyntaxError,但如果我只是这样做 city = 'London' 我会得到这个错误。 TypeError: Adress() got an unexpected keyword argument 'city'

标签: python django unit-testing testing django-testing


【解决方案1】:

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')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-01-14
    • 2010-11-10
    • 1970-01-01
    • 2020-04-30
    • 2016-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多