Как проверить, существует ли идентичный элемент в другой таблице в Django?

У меня есть две модели: 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>

Являются ли accepted и denied единственными примерами поля status или фактического статуса? Я думаю, что это должно быть BooleanField вместо CharField

Sunderam Dubey 15.02.2023 17:58

@Sunderam Dubey Вы можете игнорировать «статус», это просто посторонняя характеристика.

Drozon 15.02.2023 18:01

Так в чем у тебя проблема, я не могу понять, можешь пояснить?

Sunderam Dubey 15.02.2023 18:01

В HTML-форме я хочу, чтобы каждый caserequest отображал yes или no, в зависимости от того, существуют ли одни и те же name и datebirth в таблице Case.

Drozon 15.02.2023 18:04

Вы имеете в виду по сравнению с предыдущими экземплярами? Например, если имя — rhaul, а date — 1996/09/09, то должно отображаться no, а если второй экземпляр имеет то же имя и дату, то должно отображаться «да»? Вы хотите это?

Sunderam Dubey 15.02.2023 18:06

Я думаю да. еще раз уточню. Каждый объект в CaseRequest сравнивается на идентичное имя и дату в Case, и если есть одинаковые значения, то ответ в html да, иначе нет

Drozon 15.02.2023 18:11

По сравнению с одним предыдущим экземпляром или всеми экземплярами, присутствующими в модели?

Sunderam Dubey 15.02.2023 18:15

Все экземпляры

Drozon 15.02.2023 18:16
Как подобрать выигрышные акции с помощью анализа и визуализации на Python
Как подобрать выигрышные акции с помощью анализа и визуализации на Python
Отказ от ответственности: Эта статья предназначена только для демонстрации и не должна использоваться в качестве инвестиционного совета.
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
Потяните за рычаг выброса энергососущих проектов
Потяните за рычаг выброса энергососущих проектов
На этой неделе моя команда отменила проект, над которым я работал. Неделя усилий пошла насмарку.
Инструменты для веб-скрапинга с открытым исходным кодом: Python Developer Toolkit
Инструменты для веб-скрапинга с открытым исходным кодом: Python Developer Toolkit
Веб-скрейпинг, как мы все знаем, это дисциплина, которая развивается с течением времени. Появляются все более сложные средства борьбы с ботами, а...
Библиотека для работы с мороженым
Библиотека для работы с мороженым
Лично я попрощался с операторами print() в python. Без шуток.
Эмиссия счетов-фактур с помощью Telegram - Python RPA (BotCity)
Эмиссия счетов-фактур с помощью Telegram - Python RPA (BotCity)
Привет, люди RPA, это снова я и я несу подарки! В очередном моем приключении о том, как создавать ботов для облегчения рутины. Вот, думаю, стоит...
2
8
51
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

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' не является зарегистрированной библиотекой тегов.

Drozon 15.02.2023 19:08

А что такое птии?

Drozon 15.02.2023 19:28

Ptii — это имя моего приложения, вы должны использовать имя своего приложения.

Afj 15.02.2023 19:29

Да, я удалил его. И я попытался подключить файл utils.py. Я написал «библиотеки»: { «сравнить»: «social.utils.simple», } в ШАБЛОНАХ в settings.py. Но есть ошибка: Нет модуля с именем 'social.utils.simple'; 'social.utils' не является пакетом

Drozon 15.02.2023 19:31
Ответ принят как подходящий

Вы можете просто создать декоратор @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>

Другие вопросы по теме