Python 更改Django对象查询的查找参数

Python 更改Django对象查询的查找参数,python,django,django-models,Python,Django,Django Models,Django项目中的两个模型是 class ContractPlans(models.Model): cp_id = models.CharField(primary_key = True, db_column = "ContractPlanId", max_length = 100L) parentorg = models.ForeignKey("Parentorgs") contractnum = models.ForeignKey("Contracts", db_column

Django项目中的两个模型是

class ContractPlans(models.Model):
  cp_id = models.CharField(primary_key = True, db_column = "ContractPlanId", max_length = 100L)
  parentorg = models.ForeignKey("Parentorgs")
  contractnum = models.ForeignKey("Contracts", db_column = "ContractNum")
  plan_id = models.CharField(max_length = 100L, db_column = "PlanID")
  eff_date = models.DateField()
  exp_date = models.DateField(null=True, blank=True)
  planname = models.CharField(max_length=100L, db_column='PlanName') 


class ContractPlanTags(models.Model):
  contract_plan_id = models.IntegerField(primary_key = True, db_column = "table_id")
  parentorg = models.ForeignKey("Parentorgs", db_column = "parentorg_id")
  contractnum = models.ForeignKey("Contracts", db_column = "ContractNum")
  planid = models.ForeignKey("ContractPlans", db_column = "PlanId")
  tag_id = models.IntegerField()
  tag_value_id = models.ForeignKey("Tags", db_column = "tag_value_id")
  eff_date = models.DateField()
  exp_date = models.DateField(null=True, blank=True)
我正在执行一个
prefetch\u related()
查询
ContractPlanTags
by

lst = ContractPlanTags.objects.prefetch_related().filter(parentorg = request.REQUEST["parentorg"])
这是为了在一次数据库命中中获取与此模型类关联的所有外键对象

我的问题是Django不断抛出错误

DoesNotExist: ContractPlans matching query does not exist. 
Lookup parameters were {'cp_id__exact': u'805'}
我要做的是在序列化程序循环中提取与
ContractPlans.plan\u id
ContractPlans.planname
关联的值,以作为JSON对象传递给视图


如何解决此错误?

在筛选
外键时,需要传递该外键模型的对象:

parent_org = get_object_or_404(Parentorgs, pk=request.REQUEST["parentorg"])
lst = ContractPlanTags.objects.prefetch_related().filter(parentorg = parent_org)

错误会告诉您出了什么问题:

DoesNotExist: ContractPlans matching query does not exist. 
Lookup parameters were {'cp_id__exact': u'805'}
其中一个
对象具有无效的外键。您需要通过将键设置为
None
或创建缺少的
ContractPlans
对象,并将
cp\u id
设置为805来修复此问题


您还应该适当地加强数据库的完整性,以防止将来发生这种情况。

我认为错误在另一部分。它字面上说您正试图从数据库中提取id为805的ContractPlan,但它并不存在。您能帮我检查一下它是否存在吗?您在数据库中是否有id为805的
ContractPlans
记录?请注意,
prefetch\u related
实际上并不能避免多个数据库查询
select_related
does,在这里可能更合适。但是,如果您的数据库已损坏外键,您仍然会遇到异常。