Может ли кто-нибудь помочь мне оптимизировать мои запросы/структуру проекта Django?

Я создал новый проект Django, и он работает нормально, но я уверен, что есть лучший способ сделать следующее и решил спросить.

Итак, моя основная проблема заключается в шаблоне, где я должен вызвать один и тот же цикл for дважды. Один раз, чтобы включить клинику из url, как вы можете видеть на urls.py, а другой раз, чтобы показать остальные клиники, которые доступны в тот же день.

urls.py

path('onhold-hospitals/<slug:region_slug>/<slug:clinic_slug>/results/<yyyy:date>/', views.onhold_hospital_results, name='date-clinics-view-results')

Я использую это утверждение в шаблоне:

{% for hospital in available_hospitals %}
    {% if hospital.onhold_date|date == default_date|date and hospital.clinic == clinic%}
        <h5>Name: {{ hospital.hospital}} - Name: {{ hospital.onhold_date}} - Clinic: {{ hospital.clinic}}</h5>
    {% endif %}
{% if hospital.onhold_date|date == default_date|date and hospital.clinic != clinic%}
    <p>Other clinics available on the same day: 
        {% for hospital in available_hospitals %}
            {{hospital.clinic}}
        {% endfor %}
{% endif %}
{% endfor %}

Вот моя основная модель:

class Schedule(models.Model):
    onhold_hour = models.CharField(max_length=50, blank=True, null=True)
    onhold_date = models.DateField(default=date.today)
    region = models.ForeignKey(Region, on_delete=models.CASCADE, null=True, related_name="area")
    hospital = models.ForeignKey(Hospital, on_delete=models.CASCADE, null=True, related_name="available_hospital")
    clinic = models.ForeignKey(Clinic, on_delete=models.CASCADE, null=True, related_name="clinic_type")

все это возвращается из следующего файла views.py:

def onhold_hospital_results(request, region_slug, clinic_slug, **date_filters):
    clinic = Clinic.objects.get(slug=clinic_slug)
    region = Region.objects.get(slug=region_slug)
    get_clinics_id = Clinic.objects.get(slug = clinic_slug).id
    get_region_id = Region.objects.get(slug = region_slug).id
    default_date = today
    recent_dates = Schedule.objects.order_by('onhold_date').distinct('onhold_date').filter(onhold_date__range = (today, date_range), region = get_region_id)
    date_filters = recent_dates
    available_hospitals = Schedule.objects.filter(region = get_region_id, onhold_date=date)
    return render(request, 'hospitals_core/onhold_hospital_results.html', {
        'available_hospitals': available_hospitals,
        'region': region,
        'clinic': clinic,
        'date_filters': date_filters,
        'region_slug': region_slug,
        'default_date': default_date,
        'clinic_slug': clinic_slug
    })

Вы должны фильтровать в представлении, а не в шаблоне, и с помощью .select_related(…) [Django-doc] вы можете получить связанные больницы:

def onhold_hospital_results(request, region_slug, clinic_slug, **date_filters):
    clinic = Clinic.objects.get(slug=clinic_slug)
    region = Region.objects.get(slug=region_slug)
    default_date = today
    recent_dates = Schedule.objects.order_by('onhold_date').distinct('onhold_date').filter(onhold_date__range = (today, date_range), region=region)
    date_filters = recent_dates
    available_hospitals = Schedule.objects.filter(
        region=region, onhold_date=default_date
    ).select_related('clinic', 'hospital')
    return render(request, 'hospitals_core/onhold_hospital_results.html', {
        'available_hospitals': available_hospitals,
        'region': region,
        'clinic': clinic,
        'date_filters': date_filters,
        'region_slug': region_slug,
        'default_date': default_date,
        'clinic_slug': clinic_slug
    })

Вложенный цикл {% for hospital in available_hospitals %} также не имеет особого смысла: внешний цикл уже перечисляет больницы.

Вернуться на верх