While the testcase is simple, it is not the simplest test :)
Two things come to mind:
1. If you get rid of the Sum(), does it work then?
2. Saving the model with the base_manager_name should not use that manager
as related manager. It is only used when a model with a foreign key to
ProdutoServico
is saved.
In your original exception, it looks like ProdutoServico extends a model in
sumario.models and both override the save method:
/home/eltonplima/ssd/repository/planonegocios/marketing/models.py in save
super().save(*args, **kwargs) ...
▶ Local vars
/home/eltonplima/ssd/repository/planonegocios/sumario/models.py in save
super().save(*args, **kwargs) ...
Is it possible your problem is in one of those two?
On Tuesday 21 February 2017 16:37:12 eltonplima wrote:
> This is part of my real code but demonstrate the issue in pratice:
>
> from django.db import models
>
> class ProdutoServicoManager(models.Manager):
> def get_queryset(self):
> custo_unitario = models.F('custounitario__valor')
> quantidade = models.F('custounitario__quantidade')
> expression = models.Sum(custo_unitario * quantidade)
> custo_producao_expr = models.ExpressionWrapper(expression,
>
> output_field=models.DecimalField())
> return
> super().get_queryset().annotate(custo_producao=custo_producao_expr)
>
>
> class ProdutoServico(models.Model):
> produto = models.BooleanField(default=True)
> descricao = models.TextField()
> objects = ProdutoServicoManager()
>
> class Meta:
>
#################################################
> # Comment the line below and the test pass.
>
#################################################
> base_manager_name = 'objects'
>
>
> class CustoUnitario(models.Model):
> produto_servico = models.ForeignKey(ProdutoServico)
> item = models.CharField(max_length=128)
> quantidade = models.PositiveIntegerField()
> valor = models.DecimalField(max_digits=10,
> decimal_places=4,
> verbose_name='Valor unitário')
>
>
> class Faturamento(models.Model):
> produto_servico = models.OneToOneField(ProdutoServico)
> quantidade = models.PositiveIntegerField()
> preco_unitario = models.DecimalField(max_digits=10,
> decimal_places=2)
>
> # We need only a single simple test to demonstrate this issue.
>
> from django.test import TestCase
> from django.db import utils
>
> from model_mommy import mommy
>
> from core import models
>
> class FaturamentoTest(TestCase):
>
> def test(self):
> faturamento = mommy.make(models.Faturamento)
> produto = faturamento.produto_servico
> try:
> produto.save()
> except utils.OperationalError:
> self.fail("Whats wrong?")
>
> On Tuesday, February 21, 2017 at 9:01:50 AM UTC-3, Melvyn Sopacua wrote:
> > On Monday 20 February 2017 17:09:40 eltonplima wrote:
> > > Base class is abstract.
> > >
> > >
> > >
> > > class Base(models.Model):
> > >
> > > plano = models.ForeignKey(Plano)
> > >
> > >
> > >
> > >
> > >
> > > class Meta:
> > >
> > > abstract = True
> > >
> > >
> > >
> > >
> > >
> > > base_manager_name
> > >
> > > <https://docs.djangoproject.com/en/1.10/ref/models/options/#base-m
> > > anag
> > >
> > > er-name>
> >
> > Ack, my brain kept reading "default_manager_name".
> >
> > Still - without a ForeignKey this shouldn't break anything. It seems
> > it warrents a new bug report, but I'm curious where things break.
> > It looks like this model is used as an inline in the admin. Is that
> > correct?
> >
> >
> >
> > I cannot reproduce this with a simple test case:
> >
> >
> >
> > models:
> >
> > class CartEntryManager(models.Manager):
> > def get_queryset(self):
> > qs = super(CartEntryManager, self).get_queryset()
> > expression = models.F('quantity') * models.F('price')
> > wrapped = models.ExpressionWrapper(expression,
> > output_field=models.DecimalField(
> > max_digits=20, decimal_places=2))
--
You received this message because you are subscribed to the Google Groups
"Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/django-users.
To view this discussion on the web visit
https://groups.google.com/d/msgid/django-users/186009608.yBrPArMdij%40devstation.
For more options, visit https://groups.google.com/d/optout.