Как отобразить ссылку в списке, когда пользователь найден в другой Django-модели
У меня есть поисковая строка со списком пользователей с гиперссылкой для одобрения заявок. Я хочу показывать ссылку Approved на любом пользователе, чья заявка уже одобрена, и ссылку Approve на не одобренной заявке. Я пробовал поместить гиперссылку в цикл for с условным оператором для проверки, но кнопка Approve отображается дважды для тех пользователей, чьи заявки не одобрены, в то время как для тех, чьи заявки одобрены, отображаются ссылки Approve и Approved. Кто-нибудь должен милостиво помочь, так как я начинающий Django, поэтому мне трудно двигаться дальше. Любой лучший способ достижения того же самого был бы очень признателен. Спасибо
Код модели:
class Fee(models.Model):
applicant = models.OneToOneField(User, on_delete=models.CASCADE, null=True)
email = models.CharField(max_length=30, null=True)
phone = models.CharField(max_length=20, null=True)
date = models.DateTimeField(auto_now_add=True)
def __str__(self):
return f'Payments: {self.applicant}'
class Profile(models.Model):
applicant = models.OneToOneField(User, on_delete=models.CASCADE, null = True)
surname = models.CharField(max_length=20, null=True)
othernames = models.CharField(max_length=40, null=True)
gender = models.CharField(max_length=6, choices=GENDER, blank=True, null=True)
def __str__(self):
return f'{self.applicant.username}-Profile'
просматривает код:
def search_applicants(request):
#Set an Empty Dict of Context
context = {}
#Search Applicant Form
searchForm = SearchApplicantForm(request.GET or None)
payments = Fee.objects.all()
if searchForm.is_valid():
#Value of search form
value = searchForm.cleaned_data['value']
#Filter Applicant by Surname or Othernames using Q Objects
user_filter = Q(surname__icontains = value) | Q(othernames__icontains = value)
#Apply the Profile Object Filter
list_submited = Profile.objects.filter(user_filter)
else:
list_submited = Profile.objects.all()
paginator = Paginator(list_submited, 5)
page = request.GET.get('page')
paged_list_submited = paginator.get_page(page)
#Update context variable
context.update({
'list_applicants':paged_list_submited,
'searchForm':searchForm,
'payments':payments,
})
return render(request, 'user/list_applicants.html', context)
Код шаблона HTML:
<table class="table bg-white">
<thead class="bg-info text-white">
<tr>
<th scope="col">#</th>
<th scope="col">Surname</th>
<th scope="col">Othernames</th>
<th scope="col">Email</th>
<th scope="col">Phone Number</th>
<th scope="col">Select</th>
</tr>
</thead>
{% if list_applicants %}
<tbody>
{% for applicants in list_applicants %}
<tr>
<td>{{ forloop.counter }}</td>
<td>{{ applicants.applicant.profile.surname }}</td>
<td>{{ applicants.othernames }}</td>
<td>{{ applicants.applicant.email }}</td>
<td>{{ applicants.applicant.profile.phone }}</td>
<th >
{% for fee in payments %}
{% if fee.applicant == applicants.applicant %}
<a class="btn btn-info btn-sm">Approved</a>
{% else %}
<a class="btn btn-info btn-sm" href="{% url 'approve-applicant' applicants.id %}">Approve</a>
{% endif %}
{% endfor %}
</th>
</tr>
{% endfor %}
</tbody>
{% else %}
No Records Found
{% endif %}
</table>
Вы используете поле OneToOne, поэтому вам даже не нужно
payments = Fee.objects.all()
в вашем контексте.
Все, что вам нужно, это проверить в шаблоне, что у этого пользователя есть объект Fee:
<th>
{% if applicants.applicant.fee %}
<a class="btn btn-info btn-sm">Approved</a>
{% else %}
<a class="btn btn-info btn-sm" href="{% url 'approve-applicant' applicants.id %}">Approve</a>
{% endif %}
</th>