Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 14, 2014 11:26:16

vladimirse
Зарегистрирован: 2013-09-02
Сообщения: 69
Репутация: +  0  -
Профиль   Отправить e-mail  

Сохранение значений форм в БД

Доброго времени суток уважаемые!
Не пинайте сразу, я начинающий. Вопрос такой, есть формы надо их значения сохранить в базу, при сохранении ругается:
Cannot assign “u'Моя строка'”: “Projects.owner” must be a “User” instance.

Вот мой код:
(forms.py)

from django import forms
from django.forms.extras.widgets import SelectDateWidget
class CreateProjectWizzard(forms.Form):
    owner_form = forms.CharField(label='Владелец', max_length=138, required=False)
    projectName_form = forms.CharField(label='Краткое наименование проекта', max_length=138, required=False)
    startDate_form = forms.DateField(label='Дата начала проекта', widget=SelectDateWidget(years=range(2010, 2030)), required=False)
    endDate_form = forms.DateField(label='Дата окончания проекта', widget=SelectDateWidget(years=range(2010, 2030)), required=False)

(models.py)
class Projects(models.Model):
    owner = models.ForeignKey(settings.AUTH_USER_MODEL, verbose_name=u'Владелец')
    projectName = models.CharField(u'Наименование проекта', max_length=100)
    startDate = models.DateField(u'Дата начла проекта')
    endDate = models.DateField(u'Дата окончания проекта', blank=True, null=True)
    def __unicode__(self):
        return self.projectName
    class Meta:
        ordering = ['projectName']

(views.py)
@login_required
def createProject(request):
    if request.method == 'POST':
        forms = CreateProjectWizzard(request.POST)
        if forms.is_valid():
            f_owner = forms.cleaned_data['owner_form']
            f_projectName = forms.cleaned_data['projectName_form']
            f_startDate = forms.cleaned_data['startDate_form']
            f_endDate = forms.cleaned_data['endDate_form']
            p = Projects(owner=f_owner, projectName=f_projectName, startDate=f_startDate, endDate=f_endDate)
            p.save()
            return render_to_response('projectManager/pmIndex.html', {
                'username': request.user.get_full_name,
            }, context_instance=RequestContext(request))
    return render_to_response('projectManager/createProject.html', {
        'forms': CreateProjectWizzard,
        'username': request.user.get_full_name,
        }, context_instance=RequestContext(request))

Офлайн

#2 Окт. 14, 2014 11:30:18

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

Сохранение значений форм в БД

Офлайн

#3 Окт. 14, 2014 15:24:41

vladimirse
Зарегистрирован: 2013-09-02
Сообщения: 69
Репутация: +  0  -
Профиль   Отправить e-mail  

Сохранение значений форм в БД

Спасибо! Вроде как освоил метод.
Возник тут же такой вопрос: используя данный способ для формирования форм, к примеру, у меня поле “owner” - внешний ключь (models.ForeignKey(settings.AUTH_USER_MODEL …)), формирует выпадающий список со всеми пользователями, как можно сделать, что бы там был только текущий зарегистрированный пользователь, к примеру подставить туда request.user.get_full_name?

Офлайн

#4 Окт. 14, 2014 15:38:00

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

Сохранение значений форм в БД

А на кой чорт нужен список с одним элементом?



Офлайн

#5 Окт. 14, 2014 15:43:59

vladimirse
Зарегистрирован: 2013-09-02
Сообщения: 69
Репутация: +  0  -
Профиль   Отправить e-mail  

Сохранение значений форм в БД

Список не нужен. Необходимо вставить id текущего пользователя, ну или вообще скрыть это поле, а значение id текущего пользователя вставить по умолчанию.

Офлайн

#6 Окт. 14, 2014 15:59:51

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

Сохранение значений форм в БД

Ну так скрой, fields и exclude тебе помогут



Офлайн

#7 Окт. 14, 2014 16:26:29

vladimirse
Зарегистрирован: 2013-09-02
Сообщения: 69
Репутация: +  0  -
Профиль   Отправить e-mail  

Сохранение значений форм в БД

Ну с этим проблем, а вот как туда воткнуть id текущего пользователя из AUTH_USER_MODEL?

Офлайн

#8 Окт. 14, 2014 17:36:13

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

Сохранение значений форм в БД

Не надо ничего туда втыкать

class ProjectsForm(forms.ModelForm):
    class Meta:
       model = Projects
       exclude = ("owner", )
def foo(request):
    form = ProjectsForm(request.POST)
    form.instance.owner = request.user
    if form.is_valid():
        form.save()



Офлайн

#9 Окт. 14, 2014 20:36:59

vladimirse
Зарегистрирован: 2013-09-02
Сообщения: 69
Репутация: +  0  -
Профиль   Отправить e-mail  

Сохранение значений форм в БД

ВАХ! Спасибо, добрый человек!!!
А где бы прочитать про этот instance, уже где то натыкался но не могу найти?

Офлайн

#10 Окт. 15, 2014 05:36:33

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

Сохранение значений форм в БД

В этой статье про инстанс формы говорят ровно 25 раз.



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version