簡體   English   中英

登錄Django后如何顯示不同的自定義用戶

[英]How to display different custom users after logging in Django

我有2個自定義用戶,學生和老師。 我希望如果學生已登錄,則顯示一條特定的消息,否則,如果老師已登錄,則顯示另一條消息。

  {% if request.user.is_authenticated %} {% if user is student %} <p>Welcome, {{ user.student.surname }} Thanks for logging in.</p> {% else %} {% if user is teacher%} <p>Welcome, {{ user.teacher.surname }} Thanks for logging in.</p> {% endif %} {% endif %} 
 class User(AbstractUser): pass class Student(models.Model): user = models.OneToOneField(User, on_delete=models.CASCADE, primary_key=True) name = models.CharField(max_length=30, null=True, blank=True, default=None) surname = models.CharField(max_length=50, null=True, blank=True, default=None) class Teacher(models.Model): user = models.OneToOneField(User, on_delete=models.CASCADE, primary_key=True) name = models.CharField(max_length=30, null=True, blank=True, default=None) surname = models.CharField(max_length=50, null=True, blank=True, default=None) email = models.EmailField(unique=True, null=True, blank=True, default=None) User.student = property(lambda p: Student.objects.get_or_create(user=p)[0]) User.teacher = property(lambda p: Teacher.objects.get_or_create(user=p)[0]) 

首先,我認為將user.teacheruser.student作為屬性並不是一個好主意,這有兩個原因:
1.我假設用戶可以是學生或老師,但不能同時是兩者(如果我記錯了,請更正我)。 您正在使用get_or_create ,因此,例如,如果嘗試在用戶已經是學生的情況下訪問用戶teacher屬性,則最終將導致該用戶既是學生又是老師。
2. Django ORM已經為您完成此操作:使用OneToOneField ,只要存在相應的User或Teacher,就可以將User對象中的TeacherStudent對象引用為user.teacheruser.student

您可以使用hasattr來檢查給定的用戶是老師還是學生:

class User(AbstractUser):
     @property
     def is_teacher(self):
          return hasattr(self, 'teacher')
     @property
     def is_student(self):
          return hasattr(self, 'student')

然后相應地渲染您的模板:

{% if user.is_teacher %}
    # Do teacher-related logic
{% elif user.is_student %}
    # Do student-related logic
{% else %}
    # This should not be the case, but you may want to display an error message or something
{% endif %}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM