首页 > 解决方案 > 在导航栏上打印用户模型属性

问题描述

我正在尝试在导航栏上打印名字和公司名称,但它没有打印出任何内容

base.html

<nav class="navbar navbar-expand-lg navbar-light bg-lightgrey">
            <div class="collapse navbar-collapse" id="navbarNav">
                {% if request.user.is_authenticated and request.user.is_student %}:
                    <ul class="navbar-nav mr-auto"> 
                        <li class="nav-item">
                            <a class="nav-link" href="{% url 'home' %}">Home<span class="sr-only">(current)</span></a>
                        </li>
                            <li class="nav-item">
                                <a class="nav-link" href="{% url 'jobs' %}">Jobs</a>
                            </li>
                        </ul>
                        <ul class="navbar-nav ml-auto">
                            <li class="nav-item dropdown">
                                <a class="nav-link dropdown-toggle" href="#" id="navbarDropdown" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
                                {{student.first_name}}
                                </a>
                                <div class="dropdown-menu dropdown-menu-right" aria-labelledby="navbarDropdown">
                                    <a class="dropdown-item" href="#">My Account</a>
                                    <a class="dropdown-item" href="#">Change Password</a>
                                    <a class="dropdown-item" href="{% url 'logout' %}">Logout</a>
                                </div>
                            </li>
                        </ul>
                    </ul>
                {% elif request.user.is_authenticated and request.user.is_employer %}:
                    <ul class="navbar-nav mr-auto"> 
                        <li class="nav-item">
                            <a class="nav-link" href="{% url 'home' %}">Home<span class="sr-only(current)</span></a>
                        </li>
                        <li class="nav-item">
                            <a class="nav-link" href="#">Posts</a>
                        </li>
                        <li class="nav-item">
                            <a class="nav-link" href="jobs-create">Add Jobs</a>
                        </li>
                        <li class="nav-item">
                            <a class="nav-link" href="#">Students</a>
                        </li>
                    </ul>
                    <ul class="navbar-nav ml-5">
                        <li class="nav-item dropdown">
                            <a class="nav-link dropdown-toggle" href="#" id="navbarDropdown" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
                            {{employer.company_name}}
                            </a>
                            <div class="dropdown-menu dropdown-menu-right" aria-labelledby="navbarDropdown">
                                <a class="dropdown-item" href="#">My Account</a>
                                <a class="dropdown-item" href="#">Change Password</a>
                                <a class="dropdown-item" href="{% url 'logout' %}">Logout</a>
                            </div>
                        </li>
                        </ul>
                    </ul>
                {% else %}:
                    <ul class="navbar-nav mr-auto"> 
                        <li class="nav-item">
                            <a class="nav-link" href="{% url 'home' %}">Home<span class="sr-only">(current)</span></a>
                        </li>
                        </ul>
                        <ul class="navbar-nav ml-auto">
                            <li class="nav-item">
                                <a class="nav-link" href="{% url 'login' %}">Login</a>
                            </li>
                            <li class="nav-item dropdown">
                                <a class="nav-link dropdown-toggle" href="#" id="navbarDropdown" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
                                Register
                                </a>
                                <div class="dropdown-menu" aria-labelledby="navbarDropdown" style="min-width: 3rem;">
                                    <a class="dropdown-item" href="{% url 'employee-register' %}">Employee</a>
                                    <a class="dropdown-item" href="{% url 'employer-register' %}">Employer</a>
                                </div>
                            </li>
                        </ul>
                    </ul>
                {% endif %}
            </div>      
        </nav>

模型.py

class User(AbstractUser):
    username = None
    email = models.EmailField(unique=True, blank=False)
    date_joined = models.DateTimeField(auto_now_add=True)
    is_active = models.BooleanField(default=True)
    is_student = models.BooleanField(default=False)
    is_employer = models.BooleanField(default=False)

    objects = UserManager()

    USERNAME_FIELD = 'email'
    REQUIRED_FIELDS = []

class Student(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE, related_name='student_profile', primary_key=True)
    first_name = models.CharField(max_length=100)
    last_name = models.CharField(max_length=100)
    gender = models.CharField(max_length=10, choices=GENDER_CHOICES)
    level = models.CharField(max_length=3, choices=LEVEL)
    school = models.CharField(max_length=5, choices=SCHOOL)
    major = models.CharField(max_length=40, default="")
    cv = models.FileField(blank=True)
    skills_or_trainings = models.TextField(default="")
    
    def __str__(self):
        return self.first_name + ' ' + self.last_name


class Employer(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE, related_name='employer_profile', primary_key=True)
    company_name = models.CharField(max_length=200, blank=False)
    company_address = models.TextField()
    website = models.CharField(unique=True, max_length=100, blank=False)

    def __str__(self):
        return self.company_name

表格.py

class UserRegistrationForm(UserCreationForm):
    class Meta:
        model = User
        fields = ['email']
    
    def save(self, commit=True):
        user = super().save(commit=False)
        if commit:
            user.save()
        return user

class EmployeeRegistrationForm(forms.ModelForm):
    first_name = forms.CharField(label='First Name')
    last_name = forms.CharField(label='Last Name')
    cv = forms.FileField(label='CV')
    skills_or_trainings = forms.SlugField(label='Skills or Trainings', required=False, widget=forms.Textarea)
    class Meta:
        model = Student
        fields = ['first_name', 'last_name', 'gender', 'level', 'school', 'major', 'cv', 'skills_or_trainings' ]



class EmployerRegistrationForm(forms.ModelForm):
    company_name = forms.CharField(label="Company Name")
    company_address = forms.CharField(label="Company Address")
    website = forms.CharField()

    class Meta:
        model = Employer
        fields = ['company_name', 'company_address', 'website']

我不知道我是否做得不对,或者有不同的方式来调用导航栏中的模型字段。如果我使用 {{ user.email }} 它会打印出来,但如果我使用 {{ student.first_name }},它不会打印任何东西

标签: pythondjangodjango-modelsdjango-formsdjango-views

解决方案


利用{{ user.student.first_name }}


推荐阅读