我在比较两个关系时尝试过滤ID,这是我的代码:
模型A.
class ModelA(models.Model):
name = models.CharField(max_length=20)
def __str__(self):
return '%s' %(self.id)
模型
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)
模型的视图
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})
到目前为止的结果如下:
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})
我想在qazxsw poi时得到模型的确切ID,以便更新关系B.
我应该如何使用过滤器在ModelB视图中获取该ID?
使用:Python 3.5和Django 1.11
因此,如果我理解正确,您希望基于relationship_A == save_relationship
s ModelC
属性获得一个或多个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
实例,而您只想更新最新实例,则会出现这种情况。