2011-09-14 61 views
1

我需要primary_keys,這是唯一的(的UUID)跨多個表查詢的PK查詢。Django的:所有車型

我的想法是使用模型繼承了一次查詢所有車型。我有一個BaseItem,所有其他模型都是這個BaseItem模型的子類。

現在,我的查詢不會返回我的預期和需要。這裏有一個樣品模型:

from django.db import models 
from django.contrib.auth.models import User 


class BaseRev(models.Model): 
    rev_id = models.CharField(max_length=32, primary_key=True) 
    item_id = models.CharField(max_length=32, blank=True, null=True) 
    creation_date = models.DateTimeField() 


class NamedRev(BaseRev): 
    name = models.CharField(max_length=64, blank=True, null=True) 
    description = models.CharField(max_length=256, blank=True, null=True) 
    creator = models.ForeignKey('UserProfile', related_name='namedrev_creator', blank=True, null=True) 

當我創建PK =「1234」一NamedRev,讓喜歡

BaseRev.objects.get(pk="1234") 

查詢我得到的結果與正確的PK,但它的類型BaseItem的。根據這些文檔是正確的行爲,因爲rev_id字段只存在於BaseRev表中,並且NamedRev表中的NamedRev的附加字段存在。

如何獲取給定的查詢類型NamedRev的「正確」的,完整的(所有字段)的對象?

乾杯,

回答

0

如果你設置你的父類是抽象:

class BaseRev(models.Model): 
    rev_id = models.CharField(max_length=32, primary_key=True) 
    item_id = models.CharField(max_length=32, blank=True, null=True) 
    creation_date = models.DateTimeField() 

    class Meta: 
     abstract = True 
+0

這給了我一個屬性錯誤(改名BaseRev到ABaseRev)AttributeError的:對象類型「ABaseRev」有沒有屬性「對象」 – Knack

0

您已經賺得了你的BaseRev後,執行:

>>> base_rev = BaseRev.objects.get(pk="1234") 
>>> base_rev.namedrev 
<NamedRev: NamedRev object> 

分配上述到另一個變量,你應該能夠訪問NamedRev的字段。

+0

我不完全理解你想達到什麼樣的,你可以在NamedRev查詢:'NamedRev .objects.get(PK =「1234」)' –

+0

我的目標是:我有一個ID(唯一的主鍵),不知道造成相應的項目/表的類型。所以,我可以手動遍歷所有表/模型,直到找到匹配的對象。或者 - 這是我的想法 - 查詢基表,希望Django ORM查詢派生表並返回繼承類型的對象。但Django不會爲繼承模型中的繼承字段創建列,因此它基本上只查詢基表。看起來像是手動循環所有表格最簡單的方法... – Knack

0

,你可以插入你的基地模式「類型」字段,這樣你就可以查詢基本模型,然後要求它的類型。覆蓋每個模型的save()方法以在保存前設置類型。