Django 将筛选器()与值()一起使用时重复
我有这3种型号:Django 将筛选器()与值()一起使用时重复,django,django-models,filter,duplicates,django-queryset,Django,Django Models,Filter,Duplicates,Django Queryset,我有这3种型号: class Degrey(models.Model): name = models.CharField(max_length=200) class DegreyCompany(models.Model): withdegrey = models.ForeignKey(Degrey, on_delete=models.CASCADE, null=True, blank=True) company = models.ForeignKey(Secondary, o
class Degrey(models.Model):
name = models.CharField(max_length=200)
class DegreyCompany(models.Model):
withdegrey = models.ForeignKey(Degrey, on_delete=models.CASCADE, null=True, blank=True)
company = models.ForeignKey(Secondary, on_delete=models.CASCADE, null=True, blank=True)
spesial = models.ForeignKey('Spesial', on_delete=models.CASCADE, null=True, blank=True)
name = models.CharField(max_length=200, default=withdegrey.name, null=True, blank=True)
nomberetud = models.PositiveSmallIntegerField(null=True, blank=True)
nomberexist = models.PositiveSmallIntegerField(null=True, blank=True)
class Meta:
unique_together = ('withdegrey', 'company', 'spesial'),
def __str__(self):
return self.name
class Secondary(models.Model):
withprimary = models.OneToOneField(CustomUser, null=True, blank=True, on_delete=models.CASCADE)
name = models.CharField(max_length=200)
codeonec = models.PositiveSmallIntegerField()
codelocal = models.PositiveSmallIntegerField()
address = models.CharField(max_length=200)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now_add=True)
def __str__(self):
return str(self.name)
模型:
class MediaSecParnt(models.Model):
withdegrey = models.ForeignKey(Degrey, on_delete=models.CASCADE)
withsecondray = models.ForeignKey(Secondary, on_delete=models.CASCADE)
nomberesteda = models.PositiveIntegerField(null=1, blank=1)
nomberhodor = models.PositiveIntegerField(null=1, blank=1)
当使用queryset通过model-MediaSecParnt-访问的值时:
listilam = MediaSecParnt.objects.filter(date__range=[primary1, primary2]).values(
'withsecondray__name','withdegrey__name','withsecondray_id','withdegrey_id').annotate(nomberhodor=Sum('nomberhodor'), nomberesteda=Sum('nomberesteda'))
我得到了很好的结果,但当我想添加-nomberetud-如以下查询集:
listilam = MediaSecParnt.objects.filter(date__range=[primary1, primary2]).values(
'withsecondray__name', 'withdegrey__name', 'withsecondray_id', 'withdegrey_id','withsecondray__degreycompany__withdegrey_id').annotate(
nomberhodor=Sum('nomberhodor'), nomberesteda=Sum('nomberesteda'),nberetud=Sum('withsecondray__degreycompany__nomberetud'))
这给了我duplucat的价值:
<QuerySet [
{'withsecondray_id': 2, 'withdegrey_id': 1, 'withsecondray__degreycompany__withdegrey_id': 1, 'nomberhodor': 600, 'nomberesteda': 800, 'nberetud': 510},
{'withsecondray_id': 2, 'withdegrey_id': 1, 'withsecondray__degreycompany__withdegrey_id': 2, 'nomberhodor': 600, 'nomberesteda': 800, 'nberetud': 1220},
{'withsecondray_id': 2, 'withdegrey_id': 2, 'withsecondray__degreycompany__withdegrey_id': 1, 'nomberhodor': 500, 'nomberesteda': 1000,'nberetud': 510},
{'withsecondray_id': 2, 'withdegrey_id': 2, 'withsecondray__degreycompany__withdegrey_id': 2, 'nomberhodor': 500, 'nomberesteda': 1000, 'nberetud': 1220}]>
使用secondray\uuuuu degreeycompany\uuuu nomberetud添加--in.values()使用假结果复制
如何使用ACCESnomberetud