Найти - Пользователи
Полная версия: Django forms
Начало » Django » Django forms
1 2
balalay12

Добрый день!

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

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

Насчет 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"

DOOMer
form.instance.users = self.request.user
form.instance.users.add(self.request.user)
balalay12
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)
FishHook
Мужик, освой тег
[code python][/code]
или соответствующую кнопочку на панели инструментов сообщения. Она находится левее смайлика и правее человечка с облачком.
FishHook
def form_valid(self, form):
    instance = form.save()
    instance.users.add(self.request.user)
    return super(AddErn, self).form_valid(form)
balalay12
Спасибо за помощь работает. Теперь вопрос в другом как сделать url из шаблона на такой url в файлу urls:
(r'^earnings/add_earnings/$', views.AddErn.as_view(template_name='add.html', success_url="/earnings/")) 
Я делаю так :
<a href="/earnings/add_earnings/">
но это же не по джанго.

ЗЫ из-за того что стояла другая разметка в настройках профиля теги не срабатывали. Извините.
FishHook
В Джанге есть функция reverse. В шаблонах есть соответствующий ей тег {% url %}.

Об этом и многом другом хорошо рассказано в документации. Например, тынц
balalay12
У меня еще пара вопросов:
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)
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