groups__name在哪里记录?

时间:2013-02-15 15:47:55

标签: django django-models django-testing

我的Django应用程序有几种不同类型的用户。对于我的Project模型,我想将pm列限制为User对象仅属于'Project Manager'组。浏览SE&谷歌搜索了一下,我添加了'limit_choices_to'并分配了一个Q对象。

然而,当我设置一个我确定会失败的TestCase时,似乎任何用户都可以添加为pm。 Model和TestCase如下:

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文档中引用它。

2 个答案:

答案 0 :(得分:1)

groups__name文档基本上是auth.User documentationfields lookup documentation的组合,假设您知道auth.models.User有方法groupsauth.models.Group有关。

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

答案 1 :(得分:0)

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

django.contrib.auth documentation涵盖了UserGroup模型及其字段。