我正在尝试在比较两个关系时过滤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})
目前的结果如下:
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
答案 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
个实例),而您只想更新最新的实例,则会出现这种情况。