0

私はこれについてしばらく考えています。少なくとも 2 つのアクター/ロールがあります。「学生」と「家庭教師」。私が今までやってきたことは、次のような選択肢フィールドを作ることでした:

    class UserProfile(UserenaBaseProfile):

        Roles = [('Student' , 'Student') , ('Tutor' , 'Tutor')]
        ..
        role = models.CharField(max_length = 20 , choices = actor_type , blank = True , null = True)

ビューでそれらを分割する方法に行き詰まりました!!

ビューの上で使う方法はあるのですが、user_passes_testグループの作り方もわかりません?!

学生しかいない場合、次のようなことができます。

class Student(UserProfile):
    """ 
    The Student actor and its necessary fields
    """

    courses        = models.ManyToManyField('courses.Course' , null = True, blank = True, related_name = _('student') , through = 'Registration')

    class Meta:
        verbose_name = _("Student")
        verbose_name_plural = _("Students")

    def save(self , *args , **kwargs):
        super(Student , self).save(*args , **kwargs)

        user, created = User.objects.get_or_create(username=self.username)
        group , created = Group.objects.get_or_create(name = "Student")
        if created: group.save()
        user.groups.add(group)
        user.save()

これを行う方法についての詳細な回答を教えてください。

4

1 に答える 1

1
@user_passes_test(lambda u: u.groups.filter(name='Student').exists())
def my_student_only_view(request):
    ...

アップデート

Student「Student」グループのユーザーのみに自動的にフィルター処理し、ユーザーをそのグループに自動的に保存する実際のクラスを操作する場合は、プロキシ モデルとサブクラスUserを使用しUserProfileます。

class StudentManager(models.Manager):
    def get_query_set(self, *args, **kwargs):
        qs = super(StudentManager, self).get_query_set(*args, **kwargs)
        return qs.filter(groups__name='Student')

class Student(User):
    class Meta:
        proxy = True

    objects = StudentManager()

    def save(self, *args, **kwargs):
        super(Student, self).save(*args, **kwargs)
        group, created = Group.objects.get_or_create(name='Student')
        self.groups.add(group)
于 2012-07-23T16:22:32.957 に答える