Модели Django фильтруют только последние записи

#django #filter

Вопрос:

Я разрабатываю CRM с использованием Django , моя цель-получить список только последних записей модели, мои модели, как показано ниже

 class Rapport(models.Model):
    added=models.DateField(default=timezone.now,blank=True,db_index=True)
    user=models.ForeignKey(User,on_delete=models.CASCADE)
    image=models.ImageField(upload_to=upload_location)
    image2=models.ImageField(blank=True,null=True,upload_to=upload_location2)
    can_update=models.BooleanField(default=False)
    note=models.PositiveIntegerField(default=0,db_index=True)
    observation=models.TextField(blank=True,null=True)


class Visite(models.Model):
    rapport=models.ForeignKey(Rapport,on_delete=models.CASCADE)
    observation=models.TextField()
    medecin=models.ForeignKey(Medecin,on_delete=models.CASCADE)
    produits=models.ManyToManyField(Produit,through='produits.ProduitVisite')
    priority=models.PositiveIntegerField(default=0,db_index=True)


class Medecin(models.Model):
    nom=models.CharField(max_length=255,db_index=True)
    telephone=models.CharField(max_length=10)
    email=models.EmailField(blank=True,null=True)
    commune=models.ForeignKey(Commune,on_delete=models.CASCADE)
    adresse=models.CharField(max_length=255)
    flag=models.BooleanField(default=False)
    updatable=models.BooleanField(default=True)
    contact=models.CharField(max_length=255,blank=True,null=True)
    users=models.ManyToManyField(User)
 

Я хочу получить только последний объект посещения каждого лекарства, грязный способ сделать это было бы так :

 last_visites=[Visite.objects.filter(medecin=medecin)[-1] for medecin in Medcin.objects.all()]
 

Ответ №1:

Может быть, этот метод даст вам то, что вы хотите :

 medecin_last_visit_ids = Medecin.objects.values('id','visite__id').order_by('-visite__id').distinct('id')
 

`

Комментарии:

1. я получил эту ошибку DISTINCT ON fields is not supported by this database backend , я полагаю, что mysql не поддерживает различные поля