Я пытаюсь сохранить данные из просмотров - PullRequest
0 голосов
/ 07 сентября 2011

Мой файл forms.py:

class RegisterForm(ModelForm):
    """This form lets people register as members."""

    help_string = "Please choose a password that is at 6 characters long,"\
        "and contains at least on speacial character or number"

    First_Name = forms.CharField(max_length=50)
    Last_Name = forms.CharField(max_length=50)  
    Username = forms.CharField(max_length=50)
    Password = forms.CharField(max_length=50)
    Confirm_Password = forms.CharField(max_length=50)
    Email_Address = forms.EmailField()
    Address = forms.CharField(widget=forms.Textarea)

    def save(self, commit=True): 
        cd = self.cleaned_data
        u = User.objects.create_user(
            username=self.cleaned_data['Username'],
            email=self.cleaned_data['Email_Address'],
            password=self.cleaned_data['Password'],
            )
        u.is_staff = True
        u.save()
        u.First_Name = self.cleaned_data['First_Name']
        u.Last_Name = self.cleaned_data['Last_Name']
        m = self.instance
        m.user = u
        if not commit:
            return [m, u]
        u.save()
        m.save()
        return m

Мой файл views.py:

def register(request):
    if request.method == "POST":
    form = RegisterForm(request.POST)
        if form.is_valid():
            try:
                instance = form.save()
                return HttpResponseRedirect('/registered/')
            except:
                return HttpResponseRedirect('/validation/')
    else:
        form = RegisterForm()

    return render_to_response(
        'homepage/register.html',     
        {'form':form,},
        context_instance=RequestContext(request),
        )

Мой шаблон register.html:

<h4>Register</h4>
<form action="" method="POST">
    <table border="0" cellpadding="1" cellspacing="1" id="eric">
        <tr>
        <td>{{ form.as_table }}</td>
        </tr>
        <tr>
            <td></td>
            <td>
                <input type="submit" value="Create Account">
                <input type="Reset"  value="Clear"></td>
        </tr>
    </table>
</form>

Вещив views.py он пропускает блок try и выполняет исключение.Что я должен сделать или изменить?

Ответы [ 2 ]

0 голосов
/ 13 января 2012

Поскольку вы используете ModelForm, я предлагаю вам удалить «кроме» в вашей функции регистрации.Это должно выглядеть следующим образом:

def register(request):
    if request.method == "POST":
    form = RegisterForm(request.POST)
        if form.is_valid():
            instance = form.save()
            return HttpResponseRedirect('/registered/')

    else:
        form = RegisterForm()

    return render_to_response(
        'homepage/register.html',     
        {'form':form,},
        context_instance=RequestContext(request),
        )

Причина удаления «исключая» состоит в том, что вы уже используете модель, и она предоставляет вам проверки формы.Вам не нужно создавать шаблон, сообщающий пользователю, что его ввод недействителен (то есть, если вы используете / validation /, чтобы сообщить пользователю, что у него неверный ввод).

0 голосов
/ 07 сентября 2011

Итак, вы сохраняете данные дважды. И в вашем определении модели имя пользователя должно быть уникальным. Итак, выкидываем ошибку целостности. Вы сохраняете данные в

1.) Forms save
2.) again same data you are saving in Views.

Мое предложение.

clean your data in the forms.
Remove save() from forms.
save form in views.


class RegisterForm(ModelForm):
        """This form lets people register as members."""

        help_string = "Please choose a password that is at 6 characters long,"\
            "and contains at least on speacial character or number"

        First_Name = forms.CharField(max_length=50)
        Last_Name = forms.CharField(max_length=50)  
        Username = forms.CharField(max_length=50)
        Password = forms.CharField(max_length=50)
        Confirm_Password = forms.CharField(max_length=50)
        Email_Address = forms.EmailField()
        Address = forms.CharField(widget=forms.Textarea)

        def clean_name(self,):
            username = self.cleaned_data['Username']
            return username

        def clean_email(self,):
            email = self.cleaned_data['Email_Address']
            param = {'email': email}
            if dbapi.get_user(**param):
                raise ValidationError('Email already registered')
            return email
        def clean_password(self,):
            // your logic here

В просмотрах.

Не похож на ваш код

Здесь все значения являются фиктивными. Вы просто подходите в соответствии со своими значениями

имя_регистра должно быть экземпляром вашей формы

username = register_form.cleaned_data['username']
email = register_form.cleaned_data['email']
password = register_form.cleaned_data['password']
name = register_form.cleaned_data['name']
# Create a user obj                                                                                                                             
user_obj = create_user(username, email, password) // to create a user_obj
# https://docs.djangoproject.com/en/dev/topics/auth/#creating-users
user_obj.first_name = 'xxxxxxxxx'
user_obj.last_name = 'xxxxxxxxxx'
user_obj.save()

Ok. Я пишу здесь create_user метод:

from django.contrib.auth.models import User
def create_user(username, email, password):
    # This will return the user_obj
    return User.objects.create_user(username, email, password)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...