2013-06-20 2 views
0

Две модели в моем проекте Django являютсяИзменение параметров просмотра для объекта запроса 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_related() запроса на ContractPlanTags по

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_id и ContractPlans.planname внутри цикла сериализатора перейти к представлению в виде объекта JSON.

Как устранить эту ошибку?

+0

У вас есть запись в базе данных для 'ContractPlans' с идентификатором 805? – karthikr

+0

Обратите внимание, что 'prefetch_related' фактически не избегает нескольких запросов к базе данных. 'select_related' делает и может быть здесь более уместным. Тем не менее, вы все равно получите исключения, если ваша база данных нарушила внешние ключи. –

ответ

0

при фильтрации на foreign key, вам нужно передать объект этой иностранной модели:

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

Не работает. Произошла одна и та же ошибка – Jason

+1

Я думаю, что ошибка в другой части. В буквальном смысле это означает, что вы пытаетесь вытащить ContractPlan с идентификатором 805 из базы данных, однако его не существует. Не могли бы вы проверить, существует ли это для меня? –

0

ошибка говорит вам, что случилось:

DoesNotExist: ContractPlans matching query does not exist. 
Lookup parameters were {'cp_id__exact': u'805'} 

Один из ваших ContractPlanTags объектов имеет недействительный внешний ключ. Вам необходимо исправить, либо установив ключ None или создать недостающий ContractPlans объект с cp_id из 805.

Вы должны также обеспечивать свою целостность базы данных должным образом, чтобы предотвратить это происходит в будущем.