Сортировка и фильтрация объектов модели django по значениям внешних ключей

Итак, мне дали тест для собеседования, и я пытаюсь понять, как лучше всего реализовать это:

Допустим, у нас есть проект django. С моделями:

Аренда

  • имя

Reservation

  • rental_id
  • checkin(дата)
  • checkout(дата)

Добавьте представление с таблицей резервирований с "ID предыдущего резервирования". Предыдущее бронирование - это бронирование, которое находится перед текущим в той же аренду. enter image description here

Итак, я попытался реализовать что-то, что действительно работает, но я чувствую, что проигнорировал много хороших практик, просто чтобы сделать работу, я буду признателен за некоторые идеи/советы о том, как я могу улучшить свой код, спасибо, ребята. Ps: мне действительно нужна эта работа :(

)

Вот пример моего кода:

##### models

from django.db import models

# Create your models here.


class Rental(models.Model):
    name = models.CharField(max_length=100)

    def __str__(self) -> str:
        return self.name



class Reservations(models.Model):
    rental_id = models.ForeignKey(Rental, related_name="rental_id", on_delete=models.CASCADE)
    checkin = models.DateField()
    checkout = models.DateField()

    def __str__(self) -> str:
        return f"{self.rental_id.name}, {self.id}"
#### The views implementation

from django.shortcuts import render
from .models import Rental, Reservations


def All_Reservation(request):

    reservations = Reservations.objects.all()
    rental_names = Rental.objects.values_list('name')

    ValueSet = []

    for i in sort_by_rental_name(rental_names):
        ValueSet += i

    mapped = zip(ValueSet,reservations)
    print(dict(mapped))
    
    context = {
        'reservations': reservations,
        'values': ValueSet
    }

    return render(request, "reservations.html", context)


def sort_by_rental_name(r:any) -> list:

    for i in r:
        Qset = Reservations.objects.filter(rental_id__name=i[0])
        QsetLs = list(Qset)
        objects_value_ls = []

        for i in QsetLs:

            if i.id is min([k.id for k in QsetLs]):
                objects_value_ls.append("-")

            objects_value_ls.append(QsetLs[QsetLs.index(i)-1].id)

        objects_value_ls.remove(objects_value_ls[1])

        yield objects_value_ls

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