Уведомления

Группа в Telegram: @pythonsu

#1 Март 19, 2011 12:37:22

alezhal
От:
Зарегистрирован: 2010-12-22
Сообщения: 14
Репутация: +  0  -
Профиль   Отправить e-mail  

Many to many не могу сохранить форму.

Доброго времени суток!
Помогите пожалуйста разобраться.
Суть: Вызываю форму для создания пользователя.
В форме заполняю поля. И вот это поле “labs” имеет отношение many to many Lab – User.
Ошибка: “ TypeError at /user/add ‘labs’ is an invalid keyword argument for this function ”
Понимаю, что в views.py labs=cd не так должно сохранять выбранное значение.
Голова уже не варит.
Если не сложно направьте по правильному пути.

Есть:

models.py

class Lab(models.Model):
name = models.CharField(max_length=100)
script = models.FileField(upload_to='lab_up')
....
environment = models.ForeignKey(Env)

def __unicode__(self):
return '%s' % (self.id)

class User(models.Model):
name = models.CharField(max_length=20)
.......
labs = models.ManyToManyField(Lab, blank=True)

def __unicode__(self):
return '%s ' % (self.name)
urls.py
url(r'^user/add/$', views.user_add)
views.py
def user_add(request):
if request.method == 'POST':
form = add_user(request.POST, request.FILES)
if form.is_valid():
cd = form.cleaned_data
User.objects.create(name=cd['name'],
second_name=cd['second_name'],
third_name=cd['third_name'],
group=cd['group'],
labs=cd['labs']) <------------------------------------- labs
return HttpResponseRedirect('/env/thanks/')

else:
form = add_user()
return render_to_response('user_add.html', {'form': form})
forms.py
class add_user(forms.Form):
name = forms.CharField(max_length=20)
second_name = forms.CharField(max_length=20)
third_name = forms.CharField(max_length=20)
group = forms.CharField(max_length=50, required=False)
labs = forms.ModelMultipleChoiceField(queryset=data.models.Lab.objects.all(), required=False)



Офлайн

#2 Март 20, 2011 06:05:19

fth
От:
Зарегистрирован: 2010-07-26
Сообщения: 105
Репутация: +  0  -
Профиль   Отправить e-mail  

Many to many не могу сохранить форму.

Чувствую вам стоит ознакомиться:
http://docs.djangoproject.com/en/dev/topics/forms/modelforms/

P.S.: На всякий случай спрошу, вы действительно уверены, что вам необходимо создавать пользователя, когда есть стандартное User, которое вполне возможно дополнить своим профилем?



Офлайн

#3 Март 21, 2011 10:34:14

alezhal
От:
Зарегистрирован: 2010-12-22
Сообщения: 14
Репутация: +  0  -
Профиль   Отправить e-mail  

Many to many не могу сохранить форму.

Спасибо за ссылку. Раз десять перечитал. Хотел все таки выполнить через objects.create() .
И с удовольствием использовал бы встроенный класс или третьей стороны, уже готовый, но это для эксперимента(диплом).
Вот переделал, теперь работает: в forms.py класс User переписал от класса forms.ModelForm и при сохранении формы во views.py использовал метод .save() .Djangobook рулит.

forms.py

class UserForm(forms.ModelForm):
name = forms.CharField(max_length=20)
second_name = forms.CharField(max_length=20)
third_name = forms.CharField(max_length=20)
group = forms.CharField(max_length=50, required=False)
labs = forms.ModelMultipleChoiceField(queryset=data.models.Lab.objects.all(), required=False)



class UserForm(forms.ModelForm):
class Meta:
model = User
views.py
def user_add(request):
if request.method == 'POST':
form = UserForm(request.POST)
if form.is_valid():
form.save()
return HttpResponseRedirect('/env/thanks/')

else:
form = UserForm()
return render_to_response('user_add.html', {'form': form})



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version