2016-04-06 18 views
1

Ich habe ein Proxy-Modell, das von einem anderen Modell abgeleitet wurde. Jetzt erstelle ich Objekt dieses Proxy-Modells und versuche, das Inhaltstyp-Objekt herauszufinden, indem ich ContentType.objects.get_for_model (obj) benutze, gibt es das Basisklassen-Inhaltstyp-Objekt zurück, anstatt mir den Proxy-Modell-Inhaltstyp zu geben. Ich benutze Django 1.7.8.ContentType.objects.get_for_model (obj) Rückgabe des Basisklassenmodells bei Verwendung für ein Proxy-Modellobjekt

class BaseModel(models.Model): 
    field1 = models.CharField(max_length=200) 
    field1 = models.CharField(max_length=200) 


class ProxyModel(BaseModel): 
    class Meta: 
     proxy = True 

jetzt bekomme ich ein Objekt von Proxy-Modell

proxy_obj = ProxyModel.objects.get(field1=1) 

und zu versuchen, den Inhaltstyp Klasse des proxy_obj zu finden

content_type = ContentType.objects.get_for_model(proxy_obj) 

Aber das ergibt mir den Inhaltstyp Aufgabe BaseModel anstelle von ProxyModel. Warum verhält sich das auf absurde Art? Oder mache ich etwas falsch?

Antwort

3

Von django-Dokumentation für get_for_model Methode:

nimmt entweder eine Modellklasse oder eine Instanz eines Modells, und gibt die Content Instanz dieses Modell darstellt. for_concrete_model=False ermöglicht das Abrufen der ContentType eines Proxy-Modells.

Sie haben for_concrete_model=False mit get_for_model() passieren, wie folgt aus:

content_type = ContentType.objects.get_for_model(proxy_obj, for_concrete_model=False) 
0

Um die Content eines Proxy-Modell zu erhalten, müssen Sie in der Argument übergeben for_concrete_model = False in get_for_model().

Beispiel:

content_type = ContentType.objects.get_for_model(proxy_obj, 
               for_concrete_model=False) 

Siehe official docs für weitere Informationen.