如何测试一个在Django中有外键的模型?

2024-10-01 13:24:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用python3.5和django1.10并尝试在中测试我的应用程序测试.py,但是出现了一个错误,它说:ValueError: Cannot assign "1": "NewsLetter.UserID" must be a "User" instance.那么如何在这里测试fk值? 代码如下:

class NewsletterModelTest(TestCase):

    @classmethod
    def setUpTestData(cls):
        #Set up non-modified objects used by all test methods
        NewsLetter.objects.create(NewsLetterID=1, Email='test@test.com', Connected=False,UserID=1)


    class NewsLetter(models.Model):
         NewsLetterID = models.AutoField(primary_key=True)
         Email = models.CharField(max_length=255)
         Connected = models.BooleanField(default=False)
         UserID = models.ForeignKey(User, on_delete=models.CASCADE)
         class Meta:
              db_table = 'NewsLetter'

Tags: pytestfalse应用程序objectsmodelsemail错误
2条回答

为那些在这里着陆的人。在

要为具有ForeignKey字段的模型编写测试,需要创建ForeignKey指向的模型实例,然后在ForeignKey实例上调用save(),然后将其应用于为测试创建目标模型。在

(为简洁起见而简化)

class BookTestCase(TestCase):
    def test_fields_author_name(self):
        author = Author(name="Mazuki Sekida")
        author.save()
        book = Book(name="Zen Training", author=author)
        book.save()

        # assertion example ...
        record = Book.objects.get(id=1)
        self.assertEqual(record.author.name, "Mazuki Sekida")         

在setupTestData方法中,必须创建一个用户对象,并将其传递到NewsLetter对象创建方法中。在

@classmethod
def setUpTestData(cls):
    #Set up non-modified objects used by all test methods
    user = User.objects.create(<fill params here>)
    NewsLetter.objects.create(NewsLetterID=1, Email='test@test.com', Connected=False,UserID=user)

相关问题 更多 >