Я пытаюсь создать веб-приложение, которое позволит вам отслеживать игры 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 в целом.