【发布时间】:2020-11-30 06:47:18
【问题描述】:
我正在尝试使用过滤器获取另一个类的 id,但我没有得到它,因为出现了None。
这是使用的方法:
def total(self):
soma = Venda.objects.filter(id=self.id).aggregate(total=Sum('item__qtde', flat = True))
return soma['total']
结果
下面的完整类:
class Venda(models.Model):
id = models.AutoField(u'AÇAIEX', primary_key=True)
hora_saida = models.TimeField(max_length=6)
responsavel_frete = models.CharField(max_length=14, verbose_name=u'Resp. Frete', choices = RESPONSAVEL_FRETE, default='REMETENTE')
empresa = models.ForeignKey(Empresa, on_delete=models.CASCADE)
localidade_origem = models.ForeignKey(Localidade, on_delete=models.CASCADE, verbose_name=u'Loc. Origem', related_name ='localidade_origem')
localidade_destino = models.ForeignKey(Localidade, on_delete=models.CASCADE, verbose_name=u'Loc. Destino', related_name ='localidade_destino')
cliente_origem = models.ForeignKey(Cliente, on_delete=models.CASCADE, related_name ='cliente_origem')
cliente_destino = models.ForeignKey(Cliente, on_delete=models.CASCADE, related_name ='cliente_destino')
carro = models.ForeignKey(Carro, on_delete=models.CASCADE)
motorista_principal = models.ForeignKey(Motorista, on_delete=models.CASCADE, related_name ='motorista_principal')
motorista_reserva = models.ForeignKey(Motorista, on_delete=models.CASCADE , related_name ='motorista_reserva', null=True, blank=True)
#valores default
data_venda = models.DateField(auto_now_add=True, verbose_name=u'Data',)
situacao_venda = models.CharField(max_length=10, verbose_name=u'Situação', choices = SITUACAO_VENDA, default='ATIVA')
#aba de valores teste
tipo_frete = models.CharField(max_length=10, choices = TIPO_FRETE, default='PAGO')
dinheiro = models.BooleanField()
cartao = models.BooleanField()
cartoes = models.CharField(max_length=30, choices = CARTOES, default='DINNER CLUBS', null=True, blank=True)
ano_processo = models.CharField(max_length=4, choices = CARTOES, default='VISA', null=True, blank=True)
#valor_nota = models.DecimalField(verbose_name=u'Valor Nota',
# max_digits=15, decimal_places=2, null=True, blank=True)
valor_dinheiro = models.DecimalField(verbose_name=u'Valor Dinheiro',
max_digits=15, decimal_places=2, default=Decimal('0.00'))
valor_cartao = models.DecimalField(verbose_name=u'Valor Cartão',
max_digits=15, decimal_places=2, default=Decimal('0.00'))
usuario = models.ForeignKey(User, on_delete=models.CASCADE)
agencia = models.ForeignKey(Group, on_delete=models.CASCADE, null=True, blank=True)
#produto = models.ManyToManyField(Produto, blank=False, default=None)
#staticmethod
#def autocomplete_search_fields():
# return id,
@staticmethod
def autocomplete_search_fields():
return 'id',
def __str__(self):
return str(self.id)
def imprimir(self):
return mark_safe("<a target='_blank' href='%s'>Imprimir</a>" % self.get_absolute_url())
imprimir.allow_tags = True
def get_absolute_url(self):
return reverse('venda_detail', args=[self.pk, ])
def get_venda(self):
return Venda.objects.get(pk=self.pk)
#soma o total de volume no relatorio
def total(self):
soma = Venda.objects.filter(id=self.id).aggregate(total=Sum('item__qtde', flat = True))
return soma['total']
def valortotal(self):
soma = Venda.objects.filter(id=self.id).aggregate(valortotal=Sum(F('item__produto__valor') * F('item__qtde'), output_field=FloatField()))
return soma['valortotal']
def valortotalnota(self):
return self.valor_nota
def valor_nota(self, force_insert=False, force_update=False):
valor_nota = self.valor_dinheiro + self.valor_cartao
return valor_nota
def desconto(self):
valortotal = Venda.objects.filter(id=self.id).aggregate(valortotal=Sum(F('item__produto__valor') * F('item__qtde'), output_field=FloatField()))
valor_nota = self.valor_nota
# exemplo de porcetagem return 100 - float(valor_nota.replace(",",".")) * 100 / float(valortotal['valortotal'])
if self.tipo_frete == 'CORTESIA':
return 0.00
else:
return Decimal(valortotal['valortotal']) - valor_nota()
#return valor_nota()
#return float(valortotal['valortotal'])
def clean(self, *args, **kwargs):
valortotal = Venda.objects.filter(id=self.id).aggregate(valortotal=Sum(F('item__produto__valor') * F('item__qtde'), output_field=FloatField()))
valor_nota = self.valor_nota
# if Decimal(valortotal['valortotal']) < valor_nota():
# raise forms.ValidationError("O valor do Tipo de Pagamento (dinheiro + cartão) não pode ser maior que o valor total da nota.")
class Item(models.Model):
produto = models.ForeignKey(Produto, on_delete=models.CASCADE, default=None)
qtde = models.PositiveIntegerField(null=True, blank=False)
venda = models.ForeignKey(Venda, on_delete=models.CASCADE, default=None)
class Manifesto(models.Model):
data_venda = models.DateField(default=timezone.now)
carro = models.ForeignKey(Carro, on_delete=models.CASCADE)
usuario = models.ForeignKey(User, on_delete=models.CASCADE)
def imprimir(self):
return mark_safe("<a target='_blank' href='%s'>Imprimir</a>" % self.get_absolute_url())
imprimir.allow_tags = True
def get_absolute_url(self):
return reverse('manifesto_detail', args=[self.pk, ])
#sem essa função não aparece as variaveis
def get_manifesto(self):
return Manifesto.objects.get(pk=self.pk)
def total(self):
soma = Venda.objects.filter(id=self.id).aggregate(total=Sum('item__qtde', flat = True))
return soma['total']
【问题讨论】:
标签: html python-3.x django