Уведомления

Группа в Telegram: @pythonsu

#1 Сен. 25, 2014 09:12:51

balalay12
Зарегистрирован: 2014-07-28
Сообщения: 92
Репутация: +  4  -
Профиль   Адрес электронной почты  

Django forms

Добрый день!

У меня возникла проблема с формой добавление в бд. Раньше было просто передача значений через пост а ля ПХП. Покопавшись на форуме и сайтах я нашел один пример в документации http://djbook.ru/rel1.6/topics/class-based-views/generic-editing.html#model-forms но у меня возник вопрос какой url писать в get_absolute_url

Офлайн

#2 Сен. 25, 2014 09:30:54

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Django forms

И где вопрос? Для работы с формами никакой get_absolute_url не нужен.



Офлайн

#3 Сен. 25, 2014 11:04:42

balalay12
Зарегистрирован: 2014-07-28
Сообщения: 92
Репутация: +  4  -
Профиль   Адрес электронной почты  

Django forms

Насчет get_absolute_url ясно.

А вот с формой все равно не могу понять.

Модель:

class Many(models.Model):

users = models.ManyToManyField('auth.User', related_name='+')

sum = models.FloatField()

date = models.DateField()

comment = models.CharField(max_length=100)

category = models.ForeignKey(Category)

def __unicode__(self):

    return u'%s %s %s %s' % (self.sum, self.date,  self.comment, self.category_id)

View:

class AddErn(CreateView):

model = Many

fields = ['date', 'sum', 'comment', 'category']

def form_valid(self, form):

    form.instance.users = self.request.user

    return super(AddErn, self).form_valid(form)

Urls:

(r'^earnings/add_earnings/$', views.AddErn.as_view())

Выводится ошибка "needs to have a value for field "many" before this many-to-many relationship can be used"

Отредактировано FishHook (Сен. 26, 2014 06:11:15)

Офлайн

#4 Сен. 25, 2014 15:30:06

DOOMer
От: Russia.MO.Balashikha
Зарегистрирован: 2013-01-09
Сообщения: 37
Репутация: +  9  -
Профиль   Отправить e-mail  

Django forms

form.instance.users = self.request.user
form.instance.users.add(self.request.user)

Офлайн

#5 Сен. 26, 2014 06:25:40

balalay12
Зарегистрирован: 2014-07-28
Сообщения: 92
Репутация: +  4  -
Профиль   Адрес электронной почты  

Django forms

form.instance.users.add(self.request.user)

Особо не помогло То же самое пишет.

А как через класс форм сделать чтобы в поле category был список какой мне надо, а не чтобы все там было. Через обычную форму я делал так:

category_list = Category.objects.filter(operation_type=1)

categorys = [(i.id, i.name) for i in category_list]

category = forms.ChoiceField(label=u'Категория', widget=forms.Select(), choices=categorys, required=True)

Отредактировано balalay12 (Сен. 26, 2014 06:55:27)

Офлайн

#6 Сен. 26, 2014 06:56:25

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Django forms

Мужик, освой тег

[code python][/code]
или соответствующую кнопочку на панели инструментов сообщения. Она находится левее смайлика и правее человечка с облачком.



Отредактировано FishHook (Сен. 26, 2014 06:56:59)

Офлайн

#7 Сен. 26, 2014 06:59:44

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Django forms

def form_valid(self, form):
    instance = form.save()
    instance.users.add(self.request.user)
    return super(AddErn, self).form_valid(form)



Офлайн

#8 Сен. 26, 2014 07:40:57

balalay12
Зарегистрирован: 2014-07-28
Сообщения: 92
Репутация: +  4  -
Профиль   Адрес электронной почты  

Django forms

Спасибо за помощь работает. Теперь вопрос в другом как сделать url из шаблона на такой url в файлу urls:

(r'^earnings/add_earnings/$', views.AddErn.as_view(template_name='add.html', success_url="/earnings/")) 
Я делаю так :
<a href="/earnings/add_earnings/">
но это же не по джанго.

ЗЫ из-за того что стояла другая разметка в настройках профиля теги не срабатывали. Извините.

Отредактировано balalay12 (Сен. 26, 2014 07:41:47)

Офлайн

#9 Сен. 26, 2014 08:06:59

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Django forms

В Джанге есть функция reverse. В шаблонах есть соответствующий ей тег {% url %}.

Об этом и многом другом хорошо рассказано в документации. Например, тынц



Офлайн

#10 Сен. 26, 2014 11:36:38

balalay12
Зарегистрирован: 2014-07-28
Сообщения: 92
Репутация: +  4  -
Профиль   Адрес электронной почты  

Django forms

У меня еще пара вопросов:
1. Как изменить значения перед сохранением в бд. Я попробовал так:

data = form.cleaned_data
data['sum'] *= -1
но в базу все равно заностися положительное значение.
2. Как в форму передать свой набор данных для select, чтобы не выводились все записи. В обычно форме делал так:
category_list = Category.objects.filter(operation_type=1)
categorys = [(i.id, i.name) for i in category_list]
category = forms.ChoiceField(label=u'Категория', widget=forms.Select(), choices=categorys, required=True)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version