У меня есть пользовательская модель, как показано ниже:
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)
Как показано, в модели ученика партнер может быть нулевым.Причина в том, что студент может либо напрямую зарегистрироваться в системе, не имея партнера, либо он / она может быть зарегистрирован партнером.Студент может даже указать партнера, который необязателен при зачислении.
У меня есть представление студента и шаблон 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)
в шаблоне, у меня может быть этот путь URL:
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"