Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » Django
  • » Математические операции над данными, выбранными из базы [RSS Feed]

#1 Дек. 28, 2009 21:32:37

Mutagena
От:
Зарегистрирован: 2009-10-18
Сообщения: 295
Репутация: +  0  -
Профиль   Отправить e-mail  

Математические операции над данными, выбранными из базы

Очень непонятно мне как производить математические операции над данными, которые были выбраны из базы, так как получаю ошибку “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.
Подскажите, что я делаю не так?



Офлайн

#2 Дек. 28, 2009 21:57:02

slav0nic
Команда
От: dp.ua
Зарегистрирован: 2006-05-07
Сообщения: 2267
Репутация: +  41  -
Профиль   Отправить e-mail  

Математические операции над данными, выбранными из базы

значит не int там…
в консоли что ли сложно проверить?

Офлайн

#3 Дек. 28, 2009 22:02:22

Mutagena
От:
Зарегистрирован: 2009-10-18
Сообщения: 295
Репутация: +  0  -
Профиль   Отправить e-mail  

Математические операции над данными, выбранными из базы

slav0nic, в консоли запросила

int(Tag.objects.get(id = 1).quanity)
Выводит число.



Офлайн

#4 Дек. 28, 2009 22:14:06

expee
От:
Зарегистрирован: 2009-12-21
Сообщения: 197
Репутация: +  0  -
Профиль   Отправить e-mail  

Математические операции над данными, выбранными из базы

Покажи код модели.



Офлайн

#5 Дек. 28, 2009 22:18:50

Mutagena
От:
Зарегистрирован: 2009-10-18
Сообщения: 295
Репутация: +  0  -
Профиль   Отправить e-mail  

Математические операции над данными, выбранными из базы

expee, вот:

class Tag(models.Model):
tag = models.CharField(max_length=50)
quanity = models.SmallIntegerField()



Офлайн

#6 Дек. 28, 2009 22:30:22

expee
От:
Зарегистрирован: 2009-12-21
Сообщения: 197
Репутация: +  0  -
Профиль   Отправить e-mail  

Математические операции над данными, выбранными из базы

Должно работать. Покажи сессию в консоли, где ты пытаешься вычесть значения и что за ошибку выдает.



Отредактировано (Дек. 28, 2009 22:33:20)

Офлайн

#7 Дек. 28, 2009 22:41:26

Mutagena
От:
Зарегистрирован: 2009-10-18
Сообщения: 295
Репутация: +  0  -
Профиль   Отправить e-mail  

Математические операции над данными, выбранными из базы

вот трейсбек:

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’



Офлайн

#8 Дек. 28, 2009 22:44:17

vaxXxa
От: Kyiv, Ukraine
Зарегистрирован: 2009-06-16
Сообщения: 278
Репутация: +  0  -
Профиль   Отправить e-mail  

Математические операции над данными, выбранными из базы

Mutagena, проверь type() до перевода в int и после… Может поможет.



Офлайн

#9 Дек. 28, 2009 22:44:35

expee
От:
Зарегистрирован: 2009-12-21
Сообщения: 197
Репутация: +  0  -
Профиль   Отправить e-mail  

Математические операции над данными, выбранными из базы

Здесь говорится о том, что вы пытаетесь выполнить арифметическую операцию для объектов двух типов Int и Tag :) Показываем функцию из views.py.



Отредактировано (Дек. 28, 2009 22:45:00)

Офлайн

#10 Дек. 28, 2009 22:55:42

Mutagena
От:
Зарегистрирован: 2009-10-18
Сообщения: 295
Репутация: +  0  -
Профиль   Отправить e-mail  

Математические операции над данными, выбранными из базы

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,
}
)
Если непонятно, для чего это всё, то это я облако тегов пытаюсь сделать.



Отредактировано (Дек. 28, 2009 23:00:45)

Офлайн

  • Начало
  • » Django
  • » Математические операции над данными, выбранными из базы[RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version