2017-05-15 4 views
1

Ich habe versucht, einige Modelle zu erstellen. Ich habe mir einige Beispiele angeschaut, aber die meisten funktionieren nicht. Beispiel:Django Mehrfachvererbung mit verschiedenen Tabellen

class Piece(models.Model): 
    name = models.CharField(max_length=100)  
    class Meta: 
     abstract = True 

class Article(Piece): 
    pass   

class Book(Piece): 
    pass 

class Monday(Book, Article): 
    pass  
class Tuesday(Book, Article): 
    pass 

Also mein Ziel ist es, den Wert mit so etwas zu bekommen ->Monday.Article.name. Ich möchte für jeden Wochentag verschiedene Tabellen haben, die den Namen des Artikels enthalten. Dies ist der Fehler, den ich bekomme:

ERRORS: 
Testing.Monday: (models.E005) The field 'id' from parent model 'Testing.book' clashes with the field 'id' from parent model 'Testing.article'. 
Testing.Monday: (models.E005) The field 'name' from parent model 'Testing.book' clashes with the field 'name' from parent model 'Testing.article'. 
Testing.Tuesday: (models.E005) The field 'id' from parent model 'Testing.book' clashes with the field 'id' from parent model 'Testing.article'. 
Testing.Tuesday: (models.E005) The field 'name' from parent model 'Testing.book' clashes with the field 'name' from parent model 'Testing.article'. 

Es sieht aus wie mein Artikel und Buch verwenden den gleichen Namen. Wie funktioniert das?

EDIT: diese Verwendung:

class Article(Piece): 
    article_id = models.AutoField(primary_key=True) 

class Book(Piece): 
    book_id = models.AutoField(primary_key=True) 

in diesem Fehler führen:

Testing.Monday: (models.E005) The field 'piece_ptr' from parent model 
'Testing.book' clashes with the field 'piece_ptr' from parent model 
'Testing.article'. 

Die einzige Lösung ist dies: article_to_piece = models.OneToOneField(Piece, parent_link=True) Aber das wird nicht eine Verknüpfung zwischen den Tagen erzeugen und ein Buch/Artikel. Ich kann nur einen Namen zum Tag hinzufügen.

+0

Dies ist eine wirklich schlechte Idee lösen . Verwenden Sie einfach eine einzelne Tabelle mit einem "Tag" -Feld. –

+0

Nun, ich denke ich muss es auf deine Art machen! Kannst du mir erklären, warum mein Ansatz schlecht ist? Abgesehen von der Tatsache, dass es nicht funktioniert – ExceptionFinder

Antwort

0

das Problem ist, weil das primäre Feld sowohl für die Modelle id sind, und eine Tabelle kann zwei Spalten nicht auf gleichen Namen haben, dies zu tun und es wird Ihre Fehler

class Article(Piece): 
    id = models.AutoField(primary_key=True) 
    name= models.CharField(max_length=100) 

class Book(Piece): 
    book_id = models.AutoField(primary_key=True) 
    book_name= models.CharField(max_length=100) 
+0

gut ich habe meinen Beitrag bearbeitet! – ExceptionFinder

+0

@ExceptionFinder bearbeitet meine Ans – Exprator

+0

es ist nicht wirklich, was ich erhofft, aber es könnte für andere arbeiten! – ExceptionFinder

Verwandte Themen