【问题标题】:none none on Django没有 在 Django 上没有
【发布时间】: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


    【解决方案1】:

    @Jallisson 我没有看到你的文达模型,但我认为在你的 Sum() flat=True 中不存在。另外什么是qtde

    如果你只做 Sum('item') 而不是 Sum('item__qtde') 它可能会起作用。

    我看到的一件奇怪的事情是:

     def total(self):
            soma = Venda.objects.filter(id=self.id).aggregate(total=Sum('item__qtde', flat = True))
            return soma['total']
    

    def total 在类 Manifesto

    但是在你 def total function 你做 self.id 但 self.id 是 Manifesto 类的 ID 所以这永远不会匹配,因为它是来自不同的模型

    【讨论】:

    • qtde 是数量并添加了模型 Sale 和 Item
    猜你喜欢
    • 2012-02-14
    • 1970-01-01
    • 2018-10-20
    • 2015-11-20
    • 2021-10-03
    • 2012-12-11
    • 1970-01-01
    • 1970-01-01
    • 2017-06-30
    相关资源
    最近更新 更多