Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django 保存其他表单时,如何更新其他模型字段_Django_Django Models_Django Templates - Fatal编程技术网

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()