2016-05-07 7 views
1

Ich verwende die Django-Modellvererbung, um ein Entitätsmodell zu erstellen, sodass ich zwei Fremdschlüssel im Konversationsmodell als Entity_1 und Entity referenzieren kann entity_2 kann eine Person oder ein Unternehmen sein. Jedoch habe ich immer folgende Fehlermeldung erhalten:Feld definiert eine Beziehung mit dem Modell 'Entity', die entweder nicht installiert ist oder abstrakt ist

api.Conversation.entity_1: (fields.E300) Field defines a relation with model 'Entity', which is either not installed, or is abstract. 
api.Conversation.entity_2: (fields.E300) Field defines a relation with model 'Entity', which is either not installed, or is abstract. 

Dies ist mein Code so weit:

class Entity(models.Model): 
    id = models.UUIDField(primary_key=True, default=uuid4, editable=False) 

    class Meta: 
     abstract = True 

class Person(Entity): 
    """ 
    Person model 
    """ 

    avatar = models.ImageField(upload_to=get_upload_avatar_path, blank=True, null=True, default=None, max_length=255) 
    first_name = models.CharField(max_length=255) 
    last_name = models.CharField(max_length=255) 


class Business(Entity): 
    """ 
    Business model 
` """ 
    name = models.CharField(max_length=255, null=True, default=None) 


class Conversation(models.Model): 
    id = models.UUIDField(primary_key=True, default=uuid4, editable=False) 
    entity_1 = models.ForeignKey(Entity) 
    entity_2 = models.ForeignKey(Entity) 
+0

Sie können nicht zu einer abstrakten Klasse verweisen. Es erstellt keine Datenbanktabelle. – trantu

+0

@trantu was soll ich dann tun? Ich möchte Entity_1 und Entity_2 sowohl auf Referenzperson als auch auf Business verweisen, sodass ich über das Konversationsmodell auf – methuselah

Antwort

3

Sie nicht zu einer abstrakten Klasse verweisen können. Es erstellt keine Datenbanktabelle. https://docs.djangoproject.com/en/1.9/topics/db/models/#abstract-base-classes

können Sie GenericForeignKey verwenden https://docs.djangoproject.com/en/1.9/ref/contrib/contenttypes/#generic-relations

ein Beispiel:

from django.contrib.contenttypes.fields import GenericForeignKey 
from django.contrib.contenttypes.models import ContentType 
class Conversation(models.Model): 
    entity_one = models.ForeignKey(ContentType,on_delete=models.CASCADE,related_name='entity_one') 
    entity_two = models.ForeignKey(ContentType,on_delete=models.CASCADE,related_name='entity_two') 
    entity1_id = models.PositiveIntegerField() 
    entity2_id = models.PositiveIntegerField() 
    entity_1_object = GenericForeignKey('entity_one', 'entity1_id') 
    entity_2_object = GenericForeignKey('entity_two', 'entity2_id') 
+0

Danke zugreifen kann. Ich habe den Artikel gelesen und bin immer noch nicht ganz sicher, wie dies in den Kontext meines Codes passen würde. Können Sie mir bitte ein leicht zu befolgendes Beispiel geben, das zu dem passt, was ich mache? – methuselah

+0

Dies ist, was ich bisher getan habe: http://pastebin.com/2KbXHkQh, ich bekomme immer die Fehlermeldung 'AttributError: 'Modul' Objekt hat kein Attribut 'GenericForeignKey'' – methuselah

+0

müssen Sie' von django.contrib aufrufen .contenttypes.fields importieren GenericForeignKey'. Ich habe ein Beispiel gepostet. Bitte sieh dir das an. – trantu

Verwandte Themen