Ошибка при отправке формы в Django

Я работал над проектом и застрял очень плохо. Я пытался создать функциональность "Редактировать профиль" и создал для нее форму (с помощью представлений, основанных на функциях, я чувствую себя гибко с ними работать). Я храню пользователей в таблице "Пользователь", которая находится в django.contrib.auth.models, но хотел хранить дополнительную информацию, такую ​​как номер телефона, идентификатор Facebook, идентификатор Twitter и т. д., в другой таблице, в которой я создал поле OneToOne между пользователем и его информацией. Теперь во время отправки формы редактирования профиля поле OneToOne вызывает у меня некоторые проблемы. Я делюсь всем кодом:

models.py

    from django.db import models
    from django.contrib.auth.models import User
    from django.core.validators import RegexValidator
    # Create your models here.
    class UserInfo(models.Model):


    userinfo = models.OneToOneField(User, on_delete=models.CASCADE, 
    related_name='info')
    username = models.CharField(max_length=100, blank=True)
    profilepic = models.ImageField(blank=True)
    description = models.CharField(max_length=2000, blank=True)
    phoneregex = RegexValidator(regex=r'^\+?1?\d{9,15}$')
    phonenumber = models.CharField(validators=[phoneregex], 
    max_length=13, blank=True) 
    facebook = models.URLField(max_length=200, blank=True)
    twitter = models.URLField(max_length=200, blank=True)
    github = models.URLField(max_length=200, blank=True)
    linkedin = models.URLField(max_length=200, blank=True)
    address = models.CharField(max_length=1000, blank=True)
    datejoined = models.DateField(auto_now=True)
    Skills = models.CharField(max_length=200, blank=True)

    def __str__(self):
        return self.username

views.py

def EditProfileView(request, uid):
form = EditProfileForm()
user = User.objects.get(id=uid)
userinfos = UserInfo()
if request.method == 'POST':
    form = EditProfileForm(request.POST)
    if form.is_valid():
        print("form is valid")
        userinfos = form.save()
        userinfos.username = request.POST.get('username')
        userinfos.profilepic = request.POST.get('profilepic')
        userinfos.description = request.POST.get('description')
        userinfos.phonenumber = request.POST.get('phonenumber')
        userinfos.facebook = request.POST.get('facebook')
        userinfos.twitter = request.POST.get('twitter')
        userinfos.linkedin = request.POST.get('linkedin')
        userinfos.github = request.POST.get('github')
        userinfos.address = request.POST.get('address')
        userinfos.skills = request.POST.get('skills')
        userinfos.save()
        return redirect(reverse('accounts:profile', args=(uid,)))
    else:
        print(form.errors)
        print("Form is not valid")
        return HttpResponse("Form is not valid")

else:
    print("Didn't requested Post")
    return render(request, 'edit_profile.html', {'form': form, 'user': 
user})

return render(request, 'edit_profile.html', {'form':form, 'user': 
user})

forms.py

class EditProfileForm(ModelForm):
username = forms.CharField(required=False, 
widget=forms.TextInput(attrs={'class' : 'textfield form-control'}))

# profilepic = forms.ImageField(widget=forms.FileInput(attrs={'class' 
: 'form-control'}))

phonenumber = forms.CharField(widget=forms.TextInput(attrs={'class' : 
'textfield form-control'}))

facebook = forms.URLField(widget=forms.URLInput(attrs={'class' : 
'textfield form-control'}))

twitter = forms.URLField(widget=forms.URLInput(attrs={'class' : 
'textfield form-control'}))

linkedin = forms.URLField(widget=forms.URLInput(attrs={'class' : 
'textfield form-control'}))

github = forms.CharField(widget=forms.TextInput(attrs={'class' : 
'textfield form-control'}))

class Meta:
    model = UserInfo
    fields = '__all__'

edit_profile.html:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">

<title>Document</title>
<style type="text/css">
    body {
        background: lightgray;
    }

    .main-container{
        padding: 20px;
    }

    .heading {
        font-size: 58px;
    }

    .form-container {
        padding-top: 5%;
        background: white;
    }

    .textfield {
        width: 100%;
        border: 3px solid lightgray;
        border-radius: 8px;
    }

    .textfield-row {
        padding-bottom: 40px;
        align-items: center;
        align-content: center;
    }

    .submit-button {
        width: 100%;
        border-radius: 5px;
    }

</style>
</head>
<body>
<div class="container-fluid main-container jumbotron">
    <center><h1 class="heading"><b>Edit Profile</b></h1></center>
</div>
<form action="{% url 'accounts:edit' user.id %}" class="form- 
 horizontal" method='POST'>
    {% csrf_token %}
    <div class="container text-center form-container">
        <div class="row textfield-row">
            <div class="col-sm-3">
                <label for="Username"><b>Username :</b></label>
            </div>
            <div class="col-sm-9">
                {{ form.username }}
            </div>
        </div> 
        {% comment %} 
        <div class="row textfield-row">
            <div class="col-sm-3">
                <label for="Username"><b>Profile Image :</b></label>
            </div>
            <div class="col-sm-9">
                {{ form.profilepic }}
            </div>
        </div>{% endcomment %}
        <div class="row textfield-row">
            <div class="col-sm-3">
                <label for="Username"><b>Phone :</b></label>
            </div>
            <div class="col-sm-9">
                {{ form.phonenumber }}
            </div>
        </div>
        <div class="row textfield-row">
            <div class="col-sm-3">
                <label for="Username"><b>Facebook id :</b></label>
            </div>
            <div class="col-sm-9">
                {{ form.facebook }}
            </div>
        </div>
        <div class="row textfield-row">
                <div class="col-sm-3">
                    <label for="Username"><b>Twitter id :</b></label>
                </div>
                <div class="col-sm-9">
                    {{ form.twitter }}
                </div>
        </div>
        <div class="row textfield-row">
                <div class="col-sm-3">
                    <label for="Username"><b>Linkedin id :</b></label>
                </div>
                <div class="col-sm-9">
                    {{ form.linkedin }}
                </div>
        </div>
        <div class="row textfield-row">
                <div class="col-sm-3">
                    <label for="Username"><b>Github :</b></label>
                </div>
                <div class="col-sm-9">
                    {{ form.github }}
                </div>
        </div>
        <div class="row textfield-row">
                <div class="col-sm-12">
                    <input type="submit" class="btn btn-success 
  submit-button" value="Save Profile" name="Save Profile"/>
                </div>
        </div>

    </div>
</form>
<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js">

</script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.11.0/umd/popper.min.js"></script>
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/js/bootstrap.min.js"></script>
</body>
</html>

Теперь код ошибки:

System check identified no issues (0 silenced).
April 10, 2018 - 04:30:30
Django version 2.0.3, using settings 'Dumbster.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
Didn't requested Post
[10/Apr/2018 04:30:33] "GET /dumbster/edit_profile/3 HTTP/1.1" 200 
4332
<ul class="errorlist"><li>userinfo<ul class="errorlist"><li>This field 
is required.</li></ul></li></ul>
Form is not valid
[10/Apr/2018 04:30:45] "POST /dumbster/edit_profile/3 HTTP/1.1" 200 17

Теперь здесь говорится, что поле userinfo является обязательным, которое является полем OneToOne, и, конечно, оно обязательно, но как мне его предоставить и откуда?

Пожалуйста, не беспокойтесь об отступах, все в порядке в моем коде, и, если хотите, я могу предоставить больше информации. Я знаю, что это не эффективный код, но, будучи новичком в Django и Back-end Development, это начинается для меня, и эта ошибка пожирает все мое время.

Надеюсь, что кто-нибудь сможет понять мой код на этом этапе и помочь мне решить его:(

0 ответов

Другие вопросы по тегам