Форум сайта python.su
Доброго времени суток!
Помогите пожалуйста разобраться.
Суть: Вызываю форму для создания пользователя.
В форме заполняю поля. И вот это поле “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)
url(r'^user/add/$', views.user_add)
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})
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)
Офлайн
Чувствую вам стоит ознакомиться:
http://docs.djangoproject.com/en/dev/topics/forms/modelforms/
P.S.: На всякий случай спрошу, вы действительно уверены, что вам необходимо создавать пользователя, когда есть стандартное User, которое вполне возможно дополнить своим профилем?
Офлайн
Спасибо за ссылку. Раз десять перечитал. Хотел все таки выполнить через 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
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})
Офлайн