Найти - Пользователи
Полная версия: Математические операции над данными, выбранными из базы
Начало » Django » Математические операции над данными, выбранными из базы
1 2
Mutagena
Очень непонятно мне как производить математические операции над данными, которые были выбраны из базы, так как получаю ошибку “unsupported operand type(s)”.
Приведу пример:
    min_tag = int(Tag.objects.get(id = 1).quanity)
max_tag = int(Tag.objects.get(id = 1).quanity)
step_size = max_tag - min_tag
Вызывает ошибку именно строка с вычитанием. Это мне непонятно, так как я принудительно полученный элемент привожу в типу int.
Подскажите, что я делаю не так?
slav0nic
значит не int там…
в консоли что ли сложно проверить?
Mutagena
slav0nic, в консоли запросила
int(Tag.objects.get(id = 1).quanity)
Выводит число.
expee
Покажи код модели.
Mutagena
expee, вот:
class Tag(models.Model):
tag = models.CharField(max_length=50)
quanity = models.SmallIntegerField()
expee
Должно работать. Покажи сессию в консоли, где ты пытаешься вычесть значения и что за ошибку выдает.
Mutagena
вот трейсбек:

Traceback:
File “C:\Python26\lib\site-packages\django\core\handlers\base.py” in get_response
92. response = callback(request, *callback_args, **callback_kwargs)
File “C:\Documents and Settings\Mutagena\workspace\MutagenaBlog\..\MutagenaBlog\core\views.py” in topic_list_viewer
72. cloud = cloud_of_tag()
File “C:\Documents and Settings\Mutagena\workspace\MutagenaBlog\..\MutagenaBlog\core\views.py” in cloud_of_tag
39. if (max_tag - min_tag) == 0:

Exception Type: TypeError at /
Exception Value: unsupported operand type(s) for -: ‘Tag’ and ‘int’
vaxXxa
Mutagena, проверь type() до перевода в int и после… Может поможет.
expee
Здесь говорится о том, что вы пытаетесь выполнить арифметическую операцию для объектов двух типов Int и Tag :) Показываем функцию из views.py.
Mutagena
vaxXxa, даже до преобразования int() показывает:
(type: ‘int’)

expee, ну о том, какая ошибка я в первом посте написала :)
Вот фрагмент views.py. Он довольно огромен.
def cloud_of_tag(n = 10):
tags = Tag.objects.all()
quanity_tag = len(tags)
i = 1
min_tag = int(Tag.objects.get(id = 1).quanity)
max_tag = int(Tag.objects.get(id = 1).quanity)
while i <= quanity_tag:
j = Tag.objects.get(id=i)
if j.quanity < min_tag:
min_tag = j
if j.quanity > max_tag:
max_tag = j
i = i + 1
i = 0
steps = []
tag_list = []
if quanity_tag < n:
n = quanity_tag
if (max_tag - min_tag) == 0:
step_size = 1
else:
step_size = (max_tag - min_tag) / n
while i <= n:
steps.append(min + (i * step_size))
i = i + 1
for tag in tags.object_list:
i = 1
while i <= n:
if steps[i-1] < tag.quanity <= steps[i]:
tag_list.append(tuple(tag.tag, i))
i = i + 1
return tag_list

def topic_list_viewer(request, type_of_page, page=1):
site_link = site_url(request)

if type_of_page == 'main_page':
title = 'home'
elif type_of_page == 'page':
title = 'page'

post_list = Post.objects.all()
paginator = Paginator(post_list, 2)
try:
posts = paginator.page(page)
except (EmptyPage, InvalidPage):
posts = paginator.page(paginator.num_pages)
for post in posts.object_list:
post_tuple = post.post.partition('[break]')
post.post = post_tuple[0]

cloud = cloud_of_tag()

return render_to_response('page.html',
{'SITE_LINK': site_link,
'title': settings.BLOG_NAME,
'BLOG_NAME': settings.BLOG_NAME,
'BLOG_DESCRIPTION': settings.BLOG_SHORT_DESCRIPTION,
'keywords': settings.BLOG_KEYWORDS,
'descriptions': settings.BLOG_DESCRIPTION,
'TEMP_MEDIA_URL': settings.TEMP_MEDIA_URL,
'posts': posts,
'cloud_tags': cloud,
}
)
Если непонятно, для чего это всё, то это я облако тегов пытаюсь сделать.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB