#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 не поддерживает различные поля