2016-05-02 20 views
1

Ich versuche, Beziehung zwischen Klasse Locomotion und Abschnitt zu erstellen. Für jede Sektion muss ein Locomotion-König gewählt werden (Class Locomotion wird um Plain/Bus/Train etc. erweitert). Und ich bekomme den Fehler über "Feld definiert eine Beziehung mit dem Modell 'Locomotion', die entweder nicht installiert ist oder abstrakt ist." Es gibt einen Weg es zu tun? Von dem, was ich bis jetzt gelesen habe, gibt es keinen guten Weg, es zu tun, oder ich täusche mich?Abstrakte Klasse als Fremdschlüssel

Meine Klasse Sektion:

class Section(RoadElements): 
    locomotion = models.ForeignKey(Locomotion, on_delete=models.CASCADE) 
    def __init__(self, *args, **kwargs): 
     super(Section, self).__init__(*args, **kwargs) 

    def __str__(self): 
     return self.name 

die Klasse RoadElements erweitert, abstrakte als auch.

Meine Definition von Locomotion:

class Locomotion(models.Model): 
    transportation_firm_name = models.CharField(max_length=200) 
    transportation_number = models.CharField(max_length=200) 
    departure_date_time = models.DateTimeField() 
    arrival_date_time = models.DateTimeField() 
    reservation = models.BooleanField(default=False) 

    class Meta: 
     abstract = True 

Und Klasse erweitert, zum Beispiel:

class Plain(Locomotion): 
    seat_number = models.CharField(max_length=200) 
    class_section = models.CharField(max_length=200) 
+0

** Locomotion ** ist in der gleichen App oder den gleichen models.py definiert? – trantu

+1

Locomotion wird in derselben models.py definiert. – Yurrili

+1

Bitte versuchen Sie 'locomotion = models.ForeignKey (" Locomotion ", on_delete = models.CASCADE)' – trantu

Antwort

1

Sie können einen Fremdschlüssel zu einer abstrakten Basisklasse haben, weil es keine Tabelle Datenbank für diese Klasse. In Ihrem Beispiel: Es wird eine Datenbanktabelle mit Zeilen für Plain Instanzen geben, aber keine Tabelle für Locomotion.

Der übliche Weg, dies zu tun, ist die Verwendung einer Generic Foreign Key, um auf eine der untergeordneten Klassen zu zeigen.

+0

I Ich weiß nicht, ob ich das gut verstehe, aber ich habe auf dem Stack einen Überlauf festgestellt, dass die Verwendung von Generic Foreign Key nicht länger gültig ist. Bin ich falsch? – Yurrili