У меня есть две модели: CaseRequest и Case. Объект CaseRequest имеет значения name и datebirth. Мне нужно проверить, существуют ли одинаковые значения для name и datebirth в Case. Например, результат должен быть таким:
Случай:
Name DateBirth
Don Honn 01.03.1959
Freak Hu 04.11.1993
Wend Don 06.03.1988
Запрос дела:
Name DateBirth
Tom Hawk 01.05.1999 - no
Don Honn 01.03.1959 - yes
Fold Len 03.07.1967 - no
Freak Hu 04.11.1993 - yes
Wend Don 13.12.1956 - no
Мой код: Models.py
class CaseRequest(models.Model):
name = models.CharField(max_length=255)
datebirth = models.DateField()
status = models.CharField(max_length=255)
timeapplication = models.DateField()
category = models.CharField(max_length=255)
def __str__(self):
return self.name
def get_absolute_url(self):
return reverse('caserequest')
class Case(models.Model):
name = models.CharField(max_length=255)
datebirth = models.DateField()
def __str__(self):
return self.name + ' | ' + str(self.datebirth)
def get_absolute_url(self):
return reverse('case_list')
Views.py
class CaseRequestView(ListView):
model = CaseRequest
template_name = 'caserequest.html'
Caserequest.html
<div>
{% for caserequest in object_list %}
<div>
<p>{{ caserequest.name }}, {{ caserequest.datebirth }}</p>
<!-- The result should be here: YES or NO -->
</div>
{% endfor %}
</div>
@Sunderam Dubey Вы можете игнорировать «статус», это просто посторонняя характеристика.
Так в чем у тебя проблема, я не могу понять, можешь пояснить?
В HTML-форме я хочу, чтобы каждый caserequest отображал yes или no, в зависимости от того, существуют ли одни и те же name и datebirth в таблице Case.
Вы имеете в виду по сравнению с предыдущими экземплярами? Например, если имя — rhaul, а date — 1996/09/09, то должно отображаться no, а если второй экземпляр имеет то же имя и дату, то должно отображаться «да»? Вы хотите это?
Я думаю да. еще раз уточню. Каждый объект в CaseRequest сравнивается на идентичное имя и дату в Case, и если есть одинаковые значения, то ответ в html да, иначе нет
По сравнению с одним предыдущим экземпляром или всеми экземплярами, присутствующими в модели?
Все экземпляры
I think you must to create a py file called utils.py or similar in same directory where you have view.py with following code:
from django import template
from ptii.models import Case
register = template.Library()
@register.simple_tag
def get_case(caserequest_name, caserequest_datebirth):
if Case.objects.filter(name=caserequest_name).filter(
datebirth=caserequest_datebirth).exists():
return('Yes')
else:
return('No')
И в вашем html вы должны загрузить файл utils.py и использовать такую функцию:
{% load utils.py %} {# load the file #}
{% get_case caserequest.name caserequest_datebirth as exist %} {# get Yes or No #}
Затем вы можете использовать существующее поле в своем html следующим образом:
{{ существовать }}
Спасибо за отзыв, однако у меня возникает ошибка при загрузке html — TemplateSyntaxError в /caserequest/ 'utils.py' не является зарегистрированной библиотекой тегов.
А что такое птии?
Ptii — это имя моего приложения, вы должны использовать имя своего приложения.
Да, я удалил его. И я попытался подключить файл utils.py. Я написал «библиотеки»: { «сравнить»: «social.utils.simple», } в ШАБЛОНАХ в settings.py. Но есть ошибка: Нет модуля с именем 'social.utils.simple'; 'social.utils' не является пакетом
Вы можете просто создать декоратор @property, скажем, например case_exists в моделях так:
class CaseRequest(models.Model):
name = models.CharField(max_length=255)
datebirth = models.DateField()
status = models.CharField(max_length=255)
timeapplication = models.DateField()
category = models.CharField(max_length=255)
def __str__(self):
return self.name
def get_absolute_url(self):
return reverse('caserequest')
@property
def case_exists(self):
return Case.objects.filter(name=self.name, datebirth=self.datebirth).exists()
Затем в шаблоне используйте его как:
<div>
{% for caserequest in object_list %}
<div>
<p>{{ caserequest.name }}, {{ caserequest.datebirth }} - {% if caserequest.case_exists %} Yes {% else %} No {% endif %}</p>
</div>
{% endfor %}
</div>
Являются ли accepted и denied единственными примерами поля status или фактического статуса? Я думаю, что это должно быть BooleanField вместо CharField