Ошибка целостности, Не нулевая константа ограничена при создании нового игрового экземпляра - PullRequest
0 голосов
/ 06 апреля 2019

Я пытаюсь создать веб-приложение, которое позволит вам отслеживать игры Spikeball в стиле блога.

Я пытался установить автора каждой игры текущим пользователем, а затем делегировать с помощью super, чтобы сохранить форму при ее отправке, но я все еще получаю:

IntegrityError в / game / new / Сбой ограничения NOT NULL: spike_stats_game.creator_id

Вот мои модели:

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

class Game(models.Model):
    game = models.CharField(max_length=100, blank=True,null=True)
    score = models.CharField(max_length=10, blank=True,null=True)
    winner = models.CharField(max_length=20, default=None, blank=True,null=True)
    date_played = models.DateField(default=timezone.now)
    creator = models.ForeignKey(User, on_delete=models.CASCADE)
    player1 = models.CharField(max_length=20, blank=True,null=True)
    player2 = models.CharField(max_length=20, blank=True,null=True)
    player3 = models.CharField(max_length=20, blank=True,null=True)
    player4 = models.CharField(max_length=20, blank=True,null=True)

    def __str__(self):
        return self.game

Вот мои взгляды:

from django.shortcuts import render
from django.views.generic import (
    ListView, 
    DetailView, 
    CreateView
)
from .models import Game


def home(request):

    context = {
        'games': Game.objects.all()
    }
    return render(request, 'spike_stats/home.html', context)


class GameListView(ListView):
    model = Game
    template_name = 'spike_stats/home.html' # <app>/<model>_<viewtype>.html
    context_object_name = 'games'
    ordering = ['-date_played'] # minus sign orders from newest to oldest


class GameDetailView(DetailView):
    model = Game


class GameCreateView(CreateView):
    model = Game
    fields = ['game', 'score', 'winner', 
    'player1', 'player2', 'player3', 'player4']

    def form_valid(self, form):
        form.instance.author = self.request.user
        return super().form_valid(form)


def about(request):
    return render(request, 'spike_stats/about.html',
                  {'game': 'Game 1 about'})

Даже если это исправить, я все равно получу ошибку URL, но не могу преодолеть этот блокпост. Извиняюсь, если какое-либо форматирование / информация или что-то не так, я довольно плохо знаком с Python и Stack Overflow в целом.

1 Ответ

2 голосов
/ 06 апреля 2019

Вам нужно установить значение creator, но похоже, что вы пытаетесь определить author.

. Для этого необходимо выполнить form_valid do;

def form_valid(self, form):
    game = form.save(commit=False)
    game.creator =  self.request.user
    game.save()
    # redirect or whatever you need to do
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...