0

我的 Django 应用程序有几种不同类型的用户。对于我的项目模型,我想将 pm 列限制为仅属于“项目经理”组的用户对象。在浏览 SE 并搜索了一下之后,我添加了“limit_choices_to”并分配了一个 Q 对象。

但是,当我设置一个我确信会失败的 TestCase 时,似乎任何用户都可以添加为 pm。模型和测试用例如下:

class Project(models.Model):
    name = models.CharField(max_length=50, unique=True)
    tracker = models.IntegerField(max_length=5)
    pm = models.ForeignKey('auth.User', limit_choices_to=Q(groups__name = 'Project Manager'))


class ProjectTestCase(TestCase):
    def setUp(self):
        self.name = 'Crappy Project'
        self.tracker = 38493
        self.pm = User.objects.create_user('username', 'user@example.com', 'password')
        proj = Project.objects.create(name=self.name, tracker=self.tracker, pm=self.pm)
        proj.save()

    def test_proj_creation(self):       
        # Check stored values
        proj_zero = proj_in_db[0]
        self.assertEquals(proj_zero.name, self.name)
        self.assertEquals(proj_zero.pm, self.pm)

如果我没有将用户分配到任何组,我试图理解为什么我的测试会继续通过。另外,“groups__name”记录在哪里?我无法在 Django 文档中引用它。

4

2 回答 2

1

groups__name文档基本上是auth.User 文档字段查找文档的组合,假设您知道auth.models.User有一个groupsauth.models.Group.

limit_choices仅限制管理员和(模型)表单中可用的选项;它不限制数据库中的选择,因此仍然可以通过编程方式设置任何可用的选择;在您的情况下,根本没有(默认)。您可以在数据库中戳一下,看看它实际上为您提供了哪些pm领域。

于 2013-02-15T15:58:59.907 回答
0

limit_choices_to仅限制select表单中 s 中的选择(在 admin 和您自己ModelForm的 s 中)。在您的代码中,您仍然可以分配您喜欢的任何人。

django.contrib.auth文档涵盖了UserGroup模型及其领域。

于 2013-02-15T15:59:28.503 回答