multiplying two fields

269 vistas
Ir al primer mensaje no leído

jose angel encinas ramos

no leída,
29 ene 2021, 3:49:40 p.m.29/1/2021
para Django users
Guys gd evening

I need help,really i don't kwnow how to do a multiply two fields, have a model called Articles.

class Articles(models.Model):
#models article
Nuevo = 'Nuevo'
Semi_nuevo = 'Semi_nuevo'
Usado = 'Usado'
Otros = 'Otros'
STATE_ACTUAL = (
(Nuevo, 'Nuevo'),
(Semi_nuevo,'Semi_nuevo'),
(Usado,'Usado'),
(Otros,'Otros')
)
name = models.CharField(max_length=50)
quantity = models.PositiveIntegerField()
fk_brand = models.ForeignKey(Brand, null=True, on_delete=models.SET_NULL)
model = models.CharField(max_length=50)
fk_category = models.ForeignKey(Category, null=True, on_delete=models.SET_NULL)
cost_buy = models.DecimalField(max_digits=10, decimal_places=2)
fk_supplier = models.ForeignKey(Supplier, null=True, on_delete=models.SET_NULL)
userful_life = models.DateField()
actual_state = models.CharField(max_length=12, choices=STATE_ACTUAL)
date_check = models.DateField()
location = models.CharField(max_length=50)
img = models.ImageField(upload_to='articles', null=True, blank=True)
description = models.TextField(blank=True)
#actions
created = models.DateTimeField(auto_now_add=True)
update = models.DateTimeField(auto_now=True)

class Meta:
verbose_name = 'Article'
verbose_name_plural = 'Articles'

@property
def result(self,*args, **kwargs):
mult = self.cost_buy * self.quantity
return mult

class Meta:
verbose_name = 'Article'
verbose_name_plural = 'Articles'

def __str__(self):
return '{} {} {}'.format(self.name ,self.cost_buy, self.quantity)

so i want to multiply 2 filed , cost_buy * quantity and the result show in the template

i was to try did this query in view.py 
data = Articles.objects.all().annotate(result=F('coust_buy') * F('quantity')).output_field=FloatField('result')
 

but isn't work





Ross Meredith

no leída,
29 ene 2021, 4:53:50 p.m.29/1/2021
para django...@googlegroups.com
data = Articles.objects.all().annotate(result=F('coust_buy') * F('quantity')).output_field=FloatField('result'),

contains a type for the field "cost_buy" (i.e. not "coust_by").

If that isn't it please give us the traceback.

--
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 django-users...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/django-users/3b573d77-b89a-4b39-95fd-dfd6f9d90910n%40googlegroups.com.

Ross Meredith

no leída,
29 ene 2021, 4:54:22 p.m.29/1/2021
para django...@googlegroups.com
Apologies, typo myself!

That meant to say "typo" not "type".


jose angel encinas ramos

no leída,
29 ene 2021, 5:57:02 p.m.29/1/2021
para django...@googlegroups.com
tanks Ross, i fixed my error but now only show me this

>>> data = Articles.objects.all().annotate(F=('cost_buy') * F('quantity')).output_field=FloatField('result')
>>> print(data)
<django.db.models.fields.FloatField>
>>>

what do you think?



--
José Ángel Encinas
Ing. Tecnologias de la información


Cel:  6622267620 

  
                   Never give up...
   I     I  https://us04web.zoom.us/j/4514417813

Ross Meredith

no leída,
29 ene 2021, 6:42:31 p.m.29/1/2021
para django...@googlegroups.com
You need to read the documentation as always - https://docs.djangoproject.com/en/3.1/ref/models/expressions/#using-f-with-annotations

It says that the output_field is a keyword argument for the annotate method.

Mai Elshiashi

no leída,
30 ene 2021, 3:54:15 a.m.30/1/2021
para django...@googlegroups.com
This will work 

data = Articles.objects.all().annotate(result=ExpressionWrapper(F('cost_buy') * F('quantity') , output_field=FloatField()))
now data is a queryset. so you can do something like this
data[0].result
data.values("result")
Responder a todos
Responder al autor
Reenviar
0 mensajes nuevos