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