2016-01-21 35 views
1

(這似乎是基於一個共同的問題「的問題,可能已經有你的答案」列表中,但這些都不幫我。)Django的 - InheritanceManager

我有一個 - 在管理覆蓋默認經理幾個具有多表繼承的模型。

在管理員(以及後來的前端應用程序)中,我需要列出基類中的所有內容,並且還能夠識別它們屬於哪個子類(或子類)。我想爲此使用Inheritance Manager。到目前爲止沒有運氣。

class Entry(models.Model): 
    name = models.CharField(max_length=200) 
    description = models.TextField(max_length=500) 
    uuid = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False) 
    slug = models.SlugField(unique=True) 
    objects = InheritanceManager() 

    def get_queryset(self, request): 
     qs = self.model.objects.get_queryset() 
     ordering = self.get_ordering(request) 
     if ordering: 
      qs = qs.order_by(*ordering) 
     return qs 

    def __str__ (self): 
     return self.name + " entry" 


class Person(Entity): 
    first_name = models.CharField(max_length=100) 
    last_name = models.CharField(max_length=100) 

    def __str__ (self): 
     return self.name + " Person" 

添加字符串「人」和「入口」是隻是一個測試。

實體列表只顯示Entry,即使也是(實際上)一個人。

我希望能夠寫入Entry.__str__東西,將顯示最後的子類。這樣,我能得到條目列表,看看:

Bob (Person) 
ABC Co. (Organization) 
Great Expectations (Book) 
+0

「self .__ class __.__ name__」是否有竅門? –

+0

沒有。如果我正在查看所有條目的列表,則返回父類(Entry)。 –

回答

2

我有同樣的問題,發現黑客把它拉上。但它從未感覺乾淨。 我結束了使用django-polymorphic ...

當我們存儲從項目模型繼承模型...

Project.objects.create(topic="Department Party") ArtProject.objects.create(topic="Painting with Tim", artist="T. Turner") ResearchProject.objects.create(topic="Swallow Aerodynamics", supervisor="Dr. Winter")

...並想獲得我們的所有項目,子類的模型返回!

Project.objects.all() [ <Project: id 1, topic "Department Party">, <ArtProject: id 2, topic "Painting with Tim", artist "T. Turner">, <ResearchProject: id 3, topic "Swallow Aerodynamics", supervisor "Dr. Winter"> ]

使用香草的Django,我們得到的基類對象,這是很少我們想要的東西:

Project.objects.all() [ <Project: id 1, topic "Department Party">, <Project: id 2, topic "Painting with Tim">, <Project: id 3, topic "Swallow Aerodynamics"> ]

希望幫助!

+0

看起來應該是這樣,但是當我按照快速入門中的說明進行操作並遷移模型時,我在管理員中看到「不存在」錯誤。你會善意做一個快速的例子,或解釋你如何做到這一點? –

+0

即使您瀏覽了https://django-polymorphic.readthedocs.org/en/latest/admin.html部分,也是如此? –

+0

我應該把SO聲望點拿走,因爲認爲「快速入門」就足夠了。 –