multiplying two fields

282 zobrazení
Přeskočit na první nepřečtenou zprávu

jose angel encinas ramos

nepřečteno,
29. 1. 2021 15:49:4029.01.21
komu: 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

nepřečteno,
29. 1. 2021 16:53:5029.01.21
komu: 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

nepřečteno,
29. 1. 2021 16:54:2229.01.21
komu: django...@googlegroups.com
Apologies, typo myself!

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


jose angel encinas ramos

nepřečteno,
29. 1. 2021 17:57:0229.01.21
komu: 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

nepřečteno,
29. 1. 2021 18:42:3129.01.21
komu: 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

nepřečteno,
30. 1. 2021 3:54:1530.01.21
komu: 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")
Odpovědět všem
Odpověď autorovi
Přeposlat
0 nových zpráv