Выяснить, назначен ли объект модели последним экземпляром другой модели
Работаю над кейсом по управлению комиссиями на Django. Код приведен ниже:
class Student(models.Model):
    name = models.CharField("name",max_length=200)
    cell_no = models.CharField("cell No",max_length=200)
    address = models.CharField("address",max_length=500)
    class Meta:
        verbose_name_plural = "Student"
    def __str__(self):
        return self.name
class FeeType(models.Model):
    name = models.CharField("fee Type", max_length=200)
    class Meta:
        verbose_name_plural = "Fee Type"
    def __str__(self):
        return self.name
class CollectFee(models.Model):
    student = models.ForeignKey(Student, on_delete=models.CASCADE)
    feetype = models.ForeignKey(FeeType, on_delete=models.CASCADE)
    amountdue = models.PositiveIntegerField("amount Due")
    amountpaid = models.PositiveIntegerField("amount Paid")
    balance = models.PositiveIntegerField("Balance")
    class Meta:
        verbose_name_plural = "Collect Fee"
    def __str__(self):
        return self.student.name
Тип платы - это вступительный взнос, плата за январь, плата за февраль и т.д.
 Я хочу получить список всех студентов, которым еще не был назначен последний экземпляр FeeType. Например, если в CollectFee студенту назначена плата за январь, февраль месяц, то Ok, если студенту не назначена плата за март, он должен быть включен в список.
 Я мог бы получить список всех студентов:
students= Student.objects.all()
Я могу работать с простыми фильтрами, но не знаю, как применить фильтр для решения вышеупомянутой проблемы.
В вашем FeeType нет порядка, как его отсортировать?
Давайте добавим поле "order", хотя мне и не нравится использовать слово, зарезервированное в SQL. Ваша модель CollectFee представляет собой "соединение" между Student и FeeType. Вы можете использовать ManyToMany, чтобы упростить себе жизнь.
Не забывайте, когда вы пишете на Python, разделять слова с помощью _ (= не feetype, а fee_type).
Итак, код ( не тестировался, но должен работать):
class Student(models.Model):
    name = models.CharField("name",max_length=200)
    collected_fees = models.ManyToMany("FeeType", through="CollectFee")
class FeeType(models.Model):
    order = models.IntegerField(required=True) 
    name = models.CharField("fee Type", max_length=200)
class CollectFee(models.Model):
    student = models.ForeignKey(Student, on_delete=models.CASCADE)
    fee_type = models.ForeignKey(FeeType, on_delete=models.CASCADE)
    amount_due = models.PositiveIntegerField("amount Due")
    amount_paid = models.PositiveIntegerField("amount Paid")
И некоторые запросы ( не тестировались, но должны работать)
Получение студента, всех его сборов и печать всех сборов, которые ему еще не назначены:
olivier = Student.get(name="Olivier")
for fee in olivier.collected_fees.all():
    print("{fee=}, {fee.amount_due=}, {amount_paid=}")
for fee in FeeType.all().exclude(
    id__in=[f.pk for f in olivier.collected_fees.all()]
):
    print("fee not assigned to {olivier=}: {fee=}")
 Получение последнего взноса (с использованием поля order):
last_fee = FeeType.all().order_by("order")[-1]
# get all students who doesn't belong to the group of
# "all students who have been assigned the last instance of the FeeType"
for student in Student.all().exclude(pk__in=[
    c_f.student.pk for c_f in CollectFee.filter(
        fee_type=last_fee
    )
]):
    print("Not assigned: {student=}")