Сбой ограничения NOT NULL: users_userprofile.user_id - PullRequest
0 голосов
/ 15 апреля 2019

Я пытаюсь вставить django form данные в модель UserProfile в моем приложении. Я пытался использовать django shell и views.py, но получаю эту ошибку.

Models.py

from django.db import models
from django.contrib.auth.models import User
# Create your models here.


class UserProfile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    section = models.CharField(max_length=255, blank=True)
    year = models.IntegerField(null=True, blank=True)
    course = models.CharField(max_length=255, blank=True)
    qrcode = models.CharField(max_length=255, blank=True)
    present = models.BooleanField(default=False)

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

views.py

@staticmethod
def generate_qr(request):
    if request.method == "POST":
        form = MakeAttendance(request.POST)
        if form.is_valid():
            course = form.cleaned_data.get('courses')
            section = form.cleaned_data.get('section')
            year = form.cleaned_data.get('year')
            profile = UserProfile.objects.get_or_create(user=request.user)
            userobj = UserProfile(qrcode=unique_id)
            userobj.save().filter(course=course, section=section, year=year)
    return redirect('/users/dashboard')

На этот вопрос много раз отвечали здесь, но ни одно из решений не помогло мне. Я пытался создать профиль пользователя методом get_or_create. Я попытался удалить всю базу данных и снова выполнить миграцию. Я вручную попытался передать идентификатор пользователя, но ничего.

Ответы [ 3 ]

0 голосов
/ 15 апреля 2019

Проблема в этих двух строках

userobj = UserProfile(qrcode=unique_id)
userobj.save().filter(course=course, section=section, year=year)

В первой строке вы создали экземпляр UserProfile только с qr_code и в следующей строке вы пытаетесь сохранить его, который попытается вставить новую строку в базу данных без пользователя.

0 голосов
/ 15 апреля 2019

в models.py вы должны создать пользовательский объект:

from django.conf import settings

User = settings.AUTH_USER_MODEL

до создания класса

0 голосов
/ 15 апреля 2019

Сначала создайте пользователя с помощью user=User.objects.create_user(username=request.user, password='password'), затем сохраните его с помощью user.save() и создайте профиль с помощью profile=UserProfile.objects.get_or_create(user=user). Причиной возникновения этой ошибки является то, что UserProfile ищет пользовательский экземпляр, который вы не предоставили.

...