2009-04-02 2 views
1

Ich habe derzeit drei Modelle:django Modellstruktur für viele zu viele relasionship basierend auf dem dritten Modell

class Request(models.Model): 
    requester=models.CharField() 
    dateRequested = models.DateField(auto_now=True) 
    title= models.CharField(max_length=255) 
    description = models.TextField() 

class RequestType(models.Model): 
    requestType=models.CharField('Request Type', max_length=256) 

class RequestTypeInfo(models.Model): 
    requestType=models.ForeignKey('RequestType', verbose_name='Request Type') 
    title = models.CharField('title', max_length=256) 
    info = models.CharField(max_length=256, blank=True) 

Die Idee ist, dass jede Anforderung die Informationen, die für alle Arten von Anfragen zeigt und zusätzliche Felder auf die vorgestellt Benutzer, die abhängig vom ausgewählten Anfragetyp ausgefüllt werden müssen.

Wie würde ich die Modelle ändern, um dies zu ermöglichen und wie würde ich die Ansicht schreiben, um das Formular für den Benutzer anzuzeigen, so dass die zusätzlichen Informationen inline mit der Basisanforderung angezeigt werden. Wäre es besser, eine zweite Ansicht zu haben, die nach zusätzlichen Informationen fragt?

Das Endziel ist, dass die Administratoren neue Anfragetypen erstellen können, ohne Modelle in Python zu erstellen, indem sie einfach eine neue Anfrage hinzufügen und zusätzliche Infofelder hinzufügen.

+0

Verfügt die RequestTypeInfo-Klasse nur über Titel- und Infofelder oder können für jeden RequestType unterschiedliche Felder vorhanden sein? –

+0

¿donde esta, Morchuboo? –

+0

Ich möchte, dass die Admin-Benutzer in der Lage sind, neue Anfragetypen im Admin-Backend zu erstellen, die zusätzliche Informationen von den Benutzern benötigen, wenn sie eine Anfrage dieses Anfragetyps erstellen ... ... Sinn machen? – Morchuboo

Antwort

1

Also sagen Sie, dass Sie eine Viele-zu-Viele-Beziehung von Request zu RequestTypeInfo erstellen möchten, indem Sie RequestType als Ihr Zwischenmodell verwenden?

class Request(models.Model): 
    requester=models.CharField() 
    dateRequested = models.DateField(auto_now=True) 
    title= models.CharField(max_length=255) 
    description = models.TextField() 
    request_type = models.ManyToManyField(RequestType, through='RequestTypeInfo') 

class RequestType(models.Model): 
    requestType=models.CharField('Request Type', max_length=256) 

class RequestTypeInfo(models.Model): 
    requestType=models.ForeignKey('RequestType', verbose_name='Request Type') 
    title = models.CharField('title', max_length=256) 
    info = models.CharField(max_length=256, blank=True) 

Wir können über Inline-Admin-Modelle sprechen, nachdem dies geklärt ist.

Verwandte Themen