Уведомления

Группа в Telegram: @pythonsu

#1 Июль 9, 2008 18:43:23

tty
От:
Зарегистрирован: 2008-04-17
Сообщения: 44
Репутация: +  0  -
Профиль   Отправить e-mail  

Проблемы с сохранением

Есть модель

class Tag(models.Model):
tag = models.CharField(max_length=255, core=True, help_text=“Tag cloud”)

class Admin:
pass

def __unicode__(self):
return self.tag

def get_absolute_url(self):
return ‘/blog/tag/%s/’ % (slugify(self.tag))

class Page(models.Model):
title = models.SlugField(unique = True, max_length = 100)
slug = models.SlugField(max_length = 100, unique = True)
user = models.ForeignKey(User)
tags = models.ManyToManyField(Tag, blank=True)

def save (self):
if not self.slug:
self.slug = ‘-’.join(self.title.split())
try:
Page.objects.get(slug = self.slug)
except ObjectDoesNotExist, e:
pass
super(Page, self).save() # Call the “real” save() method

def get_tags(self):
return self.tags.all()

def get_absolute_url (self):
return ‘/blog/page/%s/’ % self.slug

def get_edit_url (self):
return ‘/blog/edit/%s/’ % self.slug

def __str__ (self):
return self.title

class Admin:
pass


Есть форма при попытки сохранения через которую выдается ошибка вида “'tags' is an invalid keyword argument for this function”

class CreatePage(forms.Form):
title = forms.CharField()
edit_summary = forms.CharField()
tags = forms.CharField()

def save(self, user):
page = models.Page(title = self.cleaned_data, edit_summary = self.cleaned_data, tags = self.cleaned_data, user = user)
page.save()
return page

class EditPage(forms.Form):
title = forms.CharField()
edit_summary = forms.CharField()
tags = forms.CharField()

def __init__(self, page_ = None, *args, **kwargs):
super(forms.Form, self).__init__(*args, **kwargs)
if not page_ is None:
self.fields.initial = page_.title
self.fields.initial = page_.edit_summary
self.fields.initial = page_.tags

def save (self, slug, user):
page = models.Page.objects.get(slug = slug)
page.title = self.cleaned_data
page.slug = ‘-’.join(page.title.split())
page.edit_summary = self.cleaned_data
page.tags = self.cleaned_data
page.user = user
page.save()
return page



Как мне решить эту проблему?



Отредактировано (Июль 9, 2008 18:44:11)

Офлайн

#2 Июль 9, 2008 19:00:32

playpauseandstop
От:
Зарегистрирован: 2007-10-31
Сообщения: 77
Репутация: +  0  -
Профиль   Отправить e-mail  

Проблемы с сохранением

Офлайн

#3 Июль 9, 2008 22:59:50

tty
От:
Зарегистрирован: 2008-04-17
Сообщения: 44
Репутация: +  0  -
Профиль   Отправить e-mail  

Проблемы с сохранением

Чуток поправил форму. Теперь она выглядит так

class CreatePage(forms.Form):
title = forms.CharField()
edit_summary = forms.CharField()
tags = forms.CharField()

def save(self, user):
page = models.Page(title = self.cleaned_data, edit_summary = self.cleaned_data, user = user)
page.save()
tags = self.clreaned_data.split(' ')
for t in tags:
tag_new = models.Tag(tag=t)
page.tags.add(tag_new)
tag_new.save()
return page

При проходе в цикле по тегам на 2 итерации вылетает с ошибкой. Как мне теперь это поправить?



Офлайн

#4 Июль 9, 2008 23:27:55

Ferroman
От:
Зарегистрирован: 2006-11-16
Сообщения: 2759
Репутация: +  1  -
Профиль   Отправить e-mail  

Проблемы с сохранением

Отладкой.

Офлайн

#5 Июль 10, 2008 09:16:13

tty
От:
Зарегистрирован: 2008-04-17
Сообщения: 44
Репутация: +  0  -
Профиль   Отправить e-mail  

Проблемы с сохранением

Вылетает на конструкции tag_new.save(). Скажите что тут не так?



Офлайн

#6 Июль 10, 2008 13:40:16

Ferroman
От:
Зарегистрирован: 2006-11-16
Сообщения: 2759
Репутация: +  1  -
Профиль   Отправить e-mail  

Проблемы с сохранением

Так трудно сказать. С каким ексепшином вылетает?
А вообще, мне конструкция

tag_new = models.Tag(tag=t)
tag_new.save()
Не нравится. Вы вроде как модель присваиваете tag_new, а нужно - просто объект Tag.
Может это имелось в виду?
from mysite.blog.models import Tag
....
tag_new, created = Tag.objects.get_or_create(tag=t)
page.tags.add(tag_new)
tag_new- будет или новый объект (уже сохранённый) или старый из базы, если такой есть.
created - будет True если создан новый объект или False - если взят существующий.
Почитать больше о get_or_create

PS: Наверно, нужно приводить теги к одному виду, а то в зависимости от регистра они будут считаться разными (просто сделайте lower(), после получения или перед сохранением тега, ну или что-то типа того )

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version