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

问题描述 投票:0回答:1

我具有如下自定义用户模型:

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)

如图所示,在Student模型中,partner可以为null。原因是学生可以在没有伙伴的情况下直接注册系统,也可以由伙伴注册。学生甚至可以在注册时指定一个可选的伴侣。

我有学生资料和网址格式:

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')

我有一个网址格式和合作伙伴视图:

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')

存在此网址格式和视图,可让合作伙伴看到他/她的学生列表:

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)

在模板中,我可以使用以下网址路径:

path('students/<int:student_pk>/', partner_student_profile, name='partner_student_profile')


{% for student in partner_students %}
   <a href="{% url 'partner_student_profile' student_pk=student.pk %}">student.pk</a>
{% endfor %}

我需要的是以某种方式,而不是重写视图以对学生资料进行某些处理,而是使用已经编写的视图。我想使用这个:

def student_profile(request):
    user = request.user
    student = get_object_or_404(Student, user=user)
    return HttpResponse('The student will do some stuff such as updating his/her profile')

我不想写这个:

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')

我想重用已经写好的“ student_profile”视图

django url view model request
1个回答
0
投票

具有这样的网址。

© www.soinside.com 2019 - 2024. All rights reserved.