Моя форма регистрации не работает с django python - PullRequest
0 голосов
/ 19 сентября 2019

У меня проблема с моим приложением, регистрация не создает профили на сервере.Я пытался использовать формы django, но мне не понравилось, как они отображаются, поэтому я хотел использовать пользовательскую форму, но как только я нажимаю кнопку «Отправить», ничего не происходит, и я проверяю на бэкэнде, что нет профиля.

  • Мой файл forms.py выглядит так

    from django.forms import ModelForm
    from django import forms
    from django.contrib.auth.forms import UserCreationForm
    from django.contrib.auth.models import User
    from .models import Gig
    
    
    class GigForm(ModelForm):
        class Meta:
            model = Gig
            fields = ['title','category','description', 'price', 'photo', 'status']
    
    class SignUpForm(forms.ModelForm):
        first_name = forms.CharField(max_length=30, required=False, help_text='Optional.')
        last_name = forms.CharField(max_length=30, required=False, help_text='Optional.')
        email = forms.EmailField(max_length=254, help_text='Required. Inform a valid email address.')
        class Meta:
            model = User
            fields = ('username', 'first_name', 'last_name',  'email', 'password' )
    
    • Файл Models.py вот так

    class Profile(models.Model):
        user = models.OneToOneField(User, on_delete=models.CASCADE)
        avatar = models.CharField(max_length=500)
        about  = models.CharField(max_length=500)
        location = models.CharField(max_length=30, blank=True)
    
    
    def __str__(self):
        return self.user.username
    
    
    
  • signup.html выглядит так

    <div class="container1">
      <img src="{% static 'img/home-banner.jpg' %}" class="banner">
    <form action="#" name="myForm" method="post" onsubmit="return(validate());">
        {% csrf_token %}
        <div class="container-fluid">
            <div class="row">
                <div class="well center-block">
                    <div class="well-header">
              <h1 class="text-center "><b>Sign Up</b></h1>
            </br>
                        <hr>
                    </div>
                    <div class="row">
                        <div class="col-md-12 col-sm-12 col-xs-12">
                            <div class="form-group">
                                <div class="input-group">
                                    <div class="input-group-addon">
                                        <i class="glyphicon glyphicon-user"></i>
                                    </div>
                    <input type="text" placeholder="First Name" class="form-control"
                    name="{{ form.first_name.name }}"
                    id="{{ form.first_name.id_for_label }}"
                    {% if form.name.value != None %}value="{{ form.first_name.value|stringformat:'s' }}"{% endif %}
                    maxlength="{{ form.first_name.field.max_length }}"
                    {% if form.name.field.required %}required{% endif %}>                                               
                                </div>
                            </div>
                        </div>
                    </div>
    
                    <div class="row">
                        <div class="col-xs-12 col-sm-12 col-md-12">
                            <div class="form-group">
                                <div class="input-group">
                                    <div class="input-group-addon">
                                        <i class="glyphicon glyphicon-user"></i>
                                    </div>
                    <input type="text" placeholder="Last Name" name="txtlname" class="form-control"
                    name="{{ form.last_name.name }}"
                    id="{{ form.last_name.id_for_label }}"
                    {% if form.name.value != None %}value="{{ form.last_name.value|stringformat:'s' }}"{% endif %}
                    maxlength="{{ form.last_name.field.max_length }}"
                    {% if form.name.field.required %}required{% endif %}>
                                </div>
                            </div>
                        </div>
                    </div>
                    <div class="row">
                <div class="col-xs-12 col-sm-12 col-md-12">
                  <div class="form-group">
                    <div class="input-group">
                      <div class="input-group-addon">
                        <i class="glyphicon glyphicon-user"></i>
                      </div>
                      <input type="text" placeholder="User Name" name="txtlname" class="form-control"
                      name="{{ form.username.name }}"
                      id="{{ form.username.id_for_label }}"
                      {% if form.name.value != None %}value="{{ form.username.value|stringformat:'s' }}"{% endif %}
                      maxlength="{{ form.username.field.max_length }}"
                      {% if form.username.field.required %}required{% endif %}>
                    </div>
                  </div>
                </div>
              </div>
                    <div class="row">
                        <div class="col-md-12 col-sm-12 col-xs-12">
                            <div class="form-group">
                                <div class="input-group">
                                    <div class="input-group-addon">
                                        <i class="glyphicon glyphicon-lock"></i>
                                    </div>
                    <input type="password" minlength="8" maxlength="20" placeholder="Password" name="txtpass" class="form-control"
                    name="{{ form.password.name }}"
                    id="{{ form.password.id_for_label }}"
                    {% if form.password.value != None %}value="{{ form.password.value|stringformat:'s' }}"{% endif %}
                    maxlength="{{ form.password.field.max_length }}"
                    {% if form.password.field.required %}required{% endif %}>
                                </div>
                            </div>
                        </div>
                    </div>
    
            <div class="row">
                        <div class="col-md-12 col-xs-12 col-sm-12">
                            <div class="form-group">
                                <div class="input-group">
                                    <div class="input-group-addon">
                                        <i class="glyphicon glyphicon-envelope"></i>
                                    </div>
                    <input type="email" class="form-control" name="txtmail" placeholder="E-Mail"
                    name="{{ form.email.name }}"
                    id="{{ form.email.id_for_label }}"
                    {% if form.password.value != None %}value="{{ form.email.value|stringformat:'s' }}"{% endif %}
                    maxlength="{{ form.email.field.max_length }}"
                    {% if form.password.field.required %}required{% endif %}>           
                                </div>
                            </div>
                        </div>
                    </div>
    
                    <div class="row widget">
                        <div class="col-md-12 col-xs-12 col-sm-12">
                            <button class="btn btn-warning btn-block"> Submit </button>
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </form>
    
  • Views.py выглядит так

    def signup(request):
        if request.method == 'POST':
            form = SignUpForm(request.POST)
            if form.is_valid():
                form.save()
                user.refresh_from_db()
                username = form.cleaned_data.get('username')
                user.save()
                raw_password = form.cleaned_data.get('password1')
                user = authenticate(username=user.username, password=raw_password)
                login(request, user)
                return redirect('home.html')
        else:
            form = SignUpForm()
        return render(request, 'signup.html', {'form': form})
    

1 Ответ

0 голосов
/ 20 сентября 2019

Модель профиля имеет поля, отличные от тех, которые вы передаете в форме регистрации

в Модель профиля

  class Profile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    avatar = models.CharField(max_length=500)
    about  = models.CharField(max_length=500)
    location = models.CharField(max_length=30, blank=True)


def __str__(self):
    return self.user.username

Вы забыли создать эти поля вваша forms.py эта ссылка поможет вам

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...