Django:模拟模型中的字段

3 投票
2 回答
3976 浏览
提问于 2025-04-16 21:30

我该怎么给这个模型的用户字段赋值一个假对象呢?有没有办法绕过“'SomeModel.user' 必须是一个 'User' 实例”的检查?

 class SomeModel(models.Model):
     user = models.ForeignKey(User)

我并不打算保存这个模型,我只是想单纯地测试一下这个模型上的一个方法。而且我也不想创建一个真实的用户模型。

2 个回答

9

你可以使用 unittest.patch 来模拟一个属性:

class TestThing(django.test.TestCase):
    @unittest.patch('my_app.models.SomeModel.user', new_callable=unittest.PropertyMock)
    def test_thing(self, user_field):
        user_field.return_value = 5
        ...

这个方法在Django的字段上也能使用。

-5

你其实无法绕过那个检查。你能做到的最接近的方式是:

class SomeModel(models.Model):
    user_id = models.IntegerField(max_length=10)

撰写回答