python - 完整性错误,创建新游戏实例时限制非空常量
问题描述
我正在尝试制作一个网络应用程序,允许您以类似博客的方式跟踪 Spikeball 游戏。
我尝试将每个游戏的作者设置为当前用户,然后委托 super 以在提交表单时保存表单,但我仍然得到:
/game/new/ NOT NULL 约束处的 IntegrityError 失败: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 还是很陌生。
解决方案
您需要设置该creator
值,但看起来您正在尝试定义author
.
在一个form_valid
做的事情中做到这一点;
def form_valid(self, form):
game = form.save(commit=False)
game.creator = self.request.user
game.save()
# redirect or whatever you need to do
推荐阅读
- google-cloud-platform - GKE:具有 3 个副本的 Pub/Sub 和 Pod 部署
- r - 将 YYYYmmdd 的字符转换为 R 中的日期
- postgresql - 为什么 Postgres 在我的 JOIN 子句中使用顺序扫描?
- python - 不带 0 的百分位数
- html - CSS 不适用于 GitHub Pages,仅适用于本地
- javascript - moment.js - 如何防止夏令时更改日期
- mysql - 具有一对多连接的自引用 SQL 查询
- postgresql - 为什么我得到“致命:用户 postgres 的密码验证失败
- symbolic-math - 使用 MAGMA(计算机代数系统)和 Mac OS X 11.* (Big Sur) 时出现问题
- azure - 分析服务表格多维数据集刷新状态检查