比较关系时过滤确切的ID

时间:2017-12-16 21:40:18

标签: python django

我正在尝试在比较两个关系时过滤ID,这是我的代码:

模型:

MODELA

class ModelA(models.Model):
    name = models.CharField(max_length=20)
    def __str__(self):
        return '%s' %(self.id)

ModelB

class ModelB(models.Model):
    relationship = models.OneToOneField(ModelA)
    def __str__(self):
        return '%s' %(self.relationship)

ModelC

class ModelC(models.Model):
    relationship_A = models.ForeignKey('ModelA', null=True, blank=True)
    relationship_B = models.ForeignKey('ModelB', null=True, blank=True)
    def __str__(self):
        return '%s' %(self.id)

查看:

ModelA的视图

def RegModelA(request):
        form = ""
        if request.method == "POST":
            form = ModelAForm(request.POST)
            if form.is_valid():
                save = form.save()
                create_modelc = ModelC.objects.create(relationship_A=save, relationship_B=None)
                return redirect('/')
        else:
            form = ModelAForm()
        return render(request, "template.html", {"form":form})

目前的结果如下:

Click to see result

ModelB的视图

def RegModelB(request):
        form = ""
        if request.method == "POST":
            form = ModelBForm(request.POST)
            if form.is_valid():
                save = form.save()
                update_modelc = ModelC.objects.filter().update(relationship_B=save)
                return redirect('/')
        else:
            form = ModelBForm()
        return render(request, "template.html", {"form":form})

我想在relationship_A == save_relationship时获取ModelC的确切ID,以便更新关系_B。

我应该如何使用过滤器在ModelB视图中获取该ID?

使用: Python 3.5& Django 1.11

1 个答案:

答案 0 :(得分:2)

因此,如果我理解正确,您希望根据ModelC的{​​{1}}属性获取一个或多个ModelA实例。 Django让您查询跨越双下划线运算符id的关系的属性,从而产生以下查询:

__

那说,请注意这是一个等待发生的巨大错误。当您在ModelC.objects.filter(relationship_A__id=save.relationship.id) # or ModelC.objects.filter(relationship_A=save.relationship.id) # ModelC.objects.filter(relationship_a=save.relationship) 上使用filter时,您正在查询整个数据库,这可能会导致不必要的行为。如果您有多个ModelC个实例(具有相同的ModelC个实例),而您只想更新最新的实例,则会出现这种情况。