0

私のDjangoアプリには、いくつかの異なるタイプのユーザーがいます。私のプロジェクトモデルでは、pm列を「プロジェクトマネージャー」グループにのみ属するユーザーオブジェクトに制限したいと思います。SEを参照して少しグーグルした後、「limit_choices_to」を追加してQオブジェクトを割り当てました。

ただし、失敗すると確信していた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のドキュメントでそれを参照することはできません。

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_toselectフォーム(管理者および独自の)のsの選択肢のみを制限しますModelForm。コードでは、好きな人を割り当てることができます。

django.contrib.authドキュメントには、UserモデルGroupとそのフィールドが含まれています。

于 2013-02-15T15:59:28.503 に答える