【问题标题】:Django Models filter only last recordsDjango 模型仅过滤最后一条记录
【发布时间】:2021-09-07 03:59:57
【问题描述】:

我正在使用 Django 开发 CRM,我的目标是获取模型的最后记录列表,我的模型如下所示

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)

我只想获得每个 Medecin 的最后一个 Visite 对象,这样做的肮脏方式是这样的:

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

【问题讨论】:

    标签: django filter


    【解决方案1】:

    愿这个方法能给你你想要的:

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

    `

    【讨论】:

    • 我收到了这个错误DISTINCT ON fields is not supported by this database backend 我想mysql不支持按字段区分
    猜你喜欢
    • 2020-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-03
    • 1970-01-01
    • 1970-01-01
    • 2013-08-25
    相关资源
    最近更新 更多