Django: невозможно добавить дополнительное поле в пользовательской модели - PullRequest
0 голосов
/ 30 марта 2020

Я получил идею из случайного поста о том, как расширить поле пользовательской модели в Django, используя отношение «один к одному». Я пытаюсь написать отношение один к одному, создавая модель complete_user в models.py, но получаю ошибку. NOT NULL constraint failed: complete_user.user_id Может кто-нибудь сказать мне, что не так с моим кодом. Я новичок в django.

models.py

from django.db import models
from django.contrib.auth.models import User

class complete_user(models.Model):
    user=models.OneToOneField(User,on_delete=models.CASCADE)
    country1=models.CharField(max_length=10)

    class Meta:
        db_table='complete_user'

forms.py

from django import forms

class user_data(forms.Form):
    country=forms.CharField(widget=forms.TextInput)

html файл

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css" integrity="sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh" crossorigin="anonymous">
  </head>
  <body>
      <br>
    <center><h1 class="bg-info">Create Your New Account</h1></center>
    <header class="container">
        <div class="w-25 mx-auto">
      <form action="{% url 'save_account' %}" method="POST">
        {% csrf_token %}
        <div class="form-group">
            <label for="name">Name</label>
            <input type="text" placeholder="e.g. John" required name="name" class="form-control" id="name">
        </div>
        <div class="form-group">
          <label for="email">Email address</label>
          <input type="email" name="email" required placeholder="e.g. john12@gamil.com" class="form-control" id="email" aria-describedby="emailHelp">
          <small id="emailHelp" class="form-text text-muted">We'll never share your email with anyone else.</small>
        </div>
        <div class="form-group">
            <label for="country">Country</label>
            <input type="text" required name="country" placeholder="e.g. India" class="form-control" id="country">
        </div>
        <div class="form-group">
          <label for="password1">Password</label>
          <input type="password" minlength="8" required name="password1" class="form-control" id="password1" aria-describedby="password_help">
          <small id="password_help" class="form-text text-muted">Password should be strong it must contain numbers,alphabet and special symbols.</small>
        </div>
        <div class="form-group">
            <label for="Confirm-Password">Confirm-Password</label>
            <input type="password" minlength="8" required name="confirm-password" class="form-control" id="Confirm-Password">
        </div>
        <button type="submit" class="btn btn-primary">Submit</button>
      </form>
    </div>
    </header>
  </body>
</html>

views.py

from django.shortcuts import render,redirect
from django.http import HttpResponse
from .models import complete_user
from django.contrib.auth.models import User
from .forms import user_data
# Create your views here.

def my_account(request):
    return render(request,'account.html')

def save_account(request):
    if request.method == "POST":
        userdata=user_data(request.POST)
        name=request.POST.get("name")
        email=request.POST.get("email")
        password1=request.POST.get("password1")
        password2=request.POST.get("confirm-password")
        if (userdata.is_valid()):
            country=userdata.cleaned_data["country"]
            new_user=User.objects.create_user(username=name,email=email,password=password1)
            new_user.save()
            data=complete_user(country1=country)
            complete_user.save(self=data)
        return redirect('/payment/')
    else:
        return HttpResponse("404 Not Found")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...