Во-первых, ваше состояние, похоже, изменилось.Вы обрабатываете код, когда резюме отсутствует, в операторе if user.resume
.Таким образом, это должно быть if not user.resume
.
Во-вторых, обратное отношение не называется user.resume
, а user.resume_set
.Вы можете изменить это имя, используя related_name
, если хотите.Например: user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='resumes')
позволит получить к нему доступ через user.resumes
вместо user.resume_set
.
Тем не менее, if user.resume_set
всегда будет оцениваться как if True
, потому что это связанный менеджер, а не набор запросов,Таким образом, вы можете сделать что-то вроде этого:
{% if not user.resume_set.exists %}
<div class="empty-state-box">
<img src="{% static 'resumes/images/resume-empty-icon.png' %}" class="centered">
<p class="empty-state-text"><b>You currently don't have any resumes.</b><br>Create one and
start building your very first resume</p>
</div>
{% else %}
<p>More information here</p>
{% endif %}
Однако в вашем выражении else
вы, вероятно, будете повторять резюме с чем-то вроде этого {% for resume in user.resume_set.all %}
.В таком случае вы дважды попадете в базу данных.Один раз для user.resume_set.exists
и один раз для user.resume_set.all
, который не нужен, потому что вы можете узнать результат user.resume_set.exists
из результата user.resume_set.all
.Шаблоны Django позволяют вам делать что-то подобное для обработки пустого регистра при итерации объекта:
{% for resume in user.resume_set.all %}
Your code to display a resume item here
{% empty %}
<div class="empty-state-box">
<img src="{% static 'resumes/images/resume-empty-icon.png' %}" class="centered">
<p class="empty-state-text"><b>You currently don't have any resumes.</b><br>Create one and
start building your very first resume</p>
</div>
{% endif %}
Но все же не очень хорошая практика выполнять наборы запросов в шаблоне.Чтобы избежать этого, вы можете передать это в своем представлении:
@login_required()
def my_resumes(request):
context = {'resumes': request.user.resume_set.all()}
return render(request, 'resumes/myresumes.html', context)
Теперь вы можете сделать:
{% for resume in resumes %}
Your code to display a resume item here
{% empty %}
<div class="empty-state-box">
<img src="{% static 'resumes/images/resume-empty-icon.png' %}" class="centered">
<p class="empty-state-text"><b>You currently don't have any resumes.</b><br>Create one and
start building your very first resume</p>
</div>
{% endif %}
Обратите внимание, что вы также можете использовать предыдущий синтаксис, он будет попадать только вбаза данных один раз:
{% if not resumes %}
<div class="empty-state-box">
<img src="{% static 'resumes/images/resume-empty-icon.png' %}" class="centered">
<p class="empty-state-text"><b>You currently don't have any resumes.</b><br>Create one and
start building your very first resume</p>
</div>
{% else %}
<p>More information here</p>
{% for resume in resumes %}
Your code to display a resume item
{% endfor %}
{% endif %}