Найти - Пользователи
Полная версия: Сохранение значений форм в БД
Начало » Web » Сохранение значений форм в БД
1 2
vladimirse
Доброго времени суток уважаемые!
Не пинайте сразу, я начинающий. Вопрос такой, есть формы надо их значения сохранить в базу, при сохранении ругается:
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))

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

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()
vladimirse
ВАХ! Спасибо, добрый человек!!!
А где бы прочитать про этот instance, уже где то натыкался но не могу найти?
FishHook
В этой статье про инстанс формы говорят ровно 25 раз.
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