Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在django中,两个不同的用户如何使用一个视图?_Django_Url_View_Model_Request - Fatal编程技术网

在django中,两个不同的用户如何使用一个视图?

在django中,两个不同的用户如何使用一个视图?,django,url,view,model,request,Django,Url,View,Model,Request,我有一个自定义用户模型,如下所示: class CustomUser(AbstractUser): username = None email = EmailField(verbose_name='email address', max_length=255, unique=True, ) first_name = CharField(verbose_name='First Name', max_length=30, null=True, ) middle_nam

我有一个自定义用户模型,如下所示:

class CustomUser(AbstractUser):
    username = None
    email = EmailField(verbose_name='email address', max_length=255, unique=True, )
    first_name = CharField(verbose_name='First Name', max_length=30, null=True, )
    middle_name = CharField(verbose_name='Middle Name', max_length=30, null=True, blank=True, )
    last_name = CharField(verbose_name='Last Name', max_length=30, null=True, )
    phone_number = CharField(verbose_name='Phone Number', max_length=30, null=True, )
    is_partner = BooleanField(default=False, )
    is_student = BooleanField(default=False, )

    USERNAME_FIELD = 'email'
    REQUIRED_FIELDS = []

    objects = CustomUserManager()

    def __str__(self):
        return self.email
class Partner(Model):
    user = OneToOneField(CustomUser, on_delete=CASCADE)
    partner_name = CharField(max_length=100, )
class Student(Model):
    user = OneToOneField(CustomUser, on_delete=CASCADE)
    student_name = CharField(max_length=100, )
    partner = ForeignKey(Partner, on_delete=SET_NULL, null=True)
如上所示,用户可以是学生,也可以是合作伙伴,他们将负责一些学生并可以访问他们的资产。 合作伙伴模式如下:

class CustomUser(AbstractUser):
    username = None
    email = EmailField(verbose_name='email address', max_length=255, unique=True, )
    first_name = CharField(verbose_name='First Name', max_length=30, null=True, )
    middle_name = CharField(verbose_name='Middle Name', max_length=30, null=True, blank=True, )
    last_name = CharField(verbose_name='Last Name', max_length=30, null=True, )
    phone_number = CharField(verbose_name='Phone Number', max_length=30, null=True, )
    is_partner = BooleanField(default=False, )
    is_student = BooleanField(default=False, )

    USERNAME_FIELD = 'email'
    REQUIRED_FIELDS = []

    objects = CustomUserManager()

    def __str__(self):
        return self.email
class Partner(Model):
    user = OneToOneField(CustomUser, on_delete=CASCADE)
    partner_name = CharField(max_length=100, )
class Student(Model):
    user = OneToOneField(CustomUser, on_delete=CASCADE)
    student_name = CharField(max_length=100, )
    partner = ForeignKey(Partner, on_delete=SET_NULL, null=True)
学生模型如下所示:

class CustomUser(AbstractUser):
    username = None
    email = EmailField(verbose_name='email address', max_length=255, unique=True, )
    first_name = CharField(verbose_name='First Name', max_length=30, null=True, )
    middle_name = CharField(verbose_name='Middle Name', max_length=30, null=True, blank=True, )
    last_name = CharField(verbose_name='Last Name', max_length=30, null=True, )
    phone_number = CharField(verbose_name='Phone Number', max_length=30, null=True, )
    is_partner = BooleanField(default=False, )
    is_student = BooleanField(default=False, )

    USERNAME_FIELD = 'email'
    REQUIRED_FIELDS = []

    objects = CustomUserManager()

    def __str__(self):
        return self.email
class Partner(Model):
    user = OneToOneField(CustomUser, on_delete=CASCADE)
    partner_name = CharField(max_length=100, )
class Student(Model):
    user = OneToOneField(CustomUser, on_delete=CASCADE)
    student_name = CharField(max_length=100, )
    partner = ForeignKey(Partner, on_delete=SET_NULL, null=True)
如图所示,在学生模型中,partner可以为null。原因是学生可以直接在没有合作伙伴的情况下注册系统,也可以由合作伙伴注册。学生甚至可以在注册时指定可选的合作伙伴

我有一个学生视图和url模式:

path('student_profile/', student_profile, name='student_profile')

def student_profile(request):
    user = request.user
    student = get_object_or_404(Student, user=user)
    return HttpResponse('The student will do AAAAAA')
我有一个url模式和合作伙伴视图:

path('partner_profile/', partner_profile, name='partner_profile')


def partner_profile(request):
    user = request.user
    partner = get_object_or_404(Partner, user=user)
    return HttpResponse('The partner will do some stuff such as updating his/her profile')
此url模式和视图允许合作伙伴查看其学生列表:

path('partners/<int:partner_pk>/students/', partner_students, name='partner_students')

def partner_students(request):
    template_name = 'partners/partner_students.html'
    context = {}
    partner = get_object_or_404(Partner, user=request.user)
    partner_students = Student.objects.filter(partner=partner)
    context.update({'partner_students': partner_students})
    return render(request, template_name, context)
我不想这样写:

def partner_student_profile(request, student_pk):
    student = Student.objects.get(pk=student_pk)
    return HttpResponse('The partner will do AAAAAA for his/her student')
我想重用已经编写好的“学生档案”视图,它有这样一个url

path('profile/<str:profile_type>/<int:pk>', profile_view, name='profile_view')
因此,基本上,您使用两个url路径参数来检查您希望使用的配置文件类型,在您的情况下,它将是学生或合作伙伴。根据配置文件类型,您可以选择自己的模板,并构建自己的上下文以传递到所选模板

希望有帮助