Django 保存其他表单时,如何更新其他模型字段
您好,我有两种型号Django 保存其他表单时,如何更新其他模型字段,django,django-models,django-templates,Django,Django Models,Django Templates,您好,我有两种型号Game和Match models.py class Game(models.Model): title = models.CharField(max_length=255) team1score = models.IntegerField(null=True, blank=True,default=0) ... team2score = models.IntegerField(null=True, blank=True,default=0)
Game
和Match
models.py
class Game(models.Model):
title = models.CharField(max_length=255)
team1score = models.IntegerField(null=True, blank=True,default=0)
...
team2score = models.IntegerField(null=True, blank=True,default=0)
...
class Match(models.Model):
title = models.CharField(max_length=255)
game=models.ForeignKey(Game,on_delete=models.CASCADE)
team1score = models.IntegerField(null=True, blank=True,default=0)
...
team2score = models.IntegerField(null=True, blank=True,default=0)
...
forms.py
class MatchForm(forms.ModelForm):
team1score = forms.IntegerField(widget=forms.TextInput,required=False)
team2score = forms.IntegerField(widget=forms.TextInput,required=False)
class Meta:
model=Match
fields=['team1score',
'team2score',
...
]
我正在用下面的代码创建一个匹配对象
views.py
def creatematch(request,...):
form = MatchForm(request.POST or None)
if form.is_valid():
match = form.save(commit=False)
...
match.save()
...
现在,我的问题是如何更新game.team1score
和game.team2score
创建
match
对象时使用match
模型的ForeignKey
关系来获取所需的游戏
实例:
def creatematch(request,...):
form = MatchForm(request.POST or None)
if form.is_valid():
match = form.save(commit=False)[0]
game = match.game
game.team1score += match.team1score
game.team2score += match.team2score
game.save()
match.save()
但这是一个次优的解决方案,因为您实际上运行了一个SELECT*FROM GAME
,等待结果,然后在向数据库发送第二个查询之前执行所有计算
相反,您应该使用,它在数据库中执行此计算:
from django.db.models import F
def creatematch(request,...):
form = MatchForm(request.POST or None)
if form.is_valid():
match = form.save(commit=False)[0]
game = match.game
game.team1score = F('team1score') + match.team1score
game.team2score = F('team2score') + match.team2score
game.save()
match.save()