2017-10-30 3 views
0

ich diese Klassen haben -Wie für viele Abfragen zu viele Felder in Django

class DocumentType(models.Model): 
    type_id = models.AutoField(primary_key=True) 
    name = models.CharField('type name', max_length=200) 

class MetaData(models.Model): 
    metadata_id = models.AutoField(primary_key = True) 
    name = models.CharField('metadata name', max_length=200, unique=True) 
    description = models.TextField('description') 

class DocumentTypeMetaData(models.Model): 
    documentType_id = models.ManyToManyField(DocumentType,) 
    metadata_id = models.ManyToManyField(MetaData,) 
    required = models.BooleanField(default=False) 

Zum Beispiel würde ein Document Wert von ‚Photo‘ erforderlichen Metadaten von ‚Jahrzehnt‘ und ‚Orientierung‘.

In der DocumentTypeMetaData Klasse würde ich eine def __str__(self) Funktion haben, so etwas wie die folgenden in der Admin-Seite zurückgibt -

Photo: (Decade, Photo Type) required 

Das Format ist nicht kritisch, ich möchte nur wissen, welche Metadaten erforderlich ist. Derzeit wird nur

DocumentTypeMetaData object 

auf der Verwaltungsseite angezeigt.

Ich habe Probleme mit dem Schreiben der Abfragen für diese Funktion.

Danke!

Mark

Antwort

0

Diese Beziehungen sind nicht richtig. Die Viele-zu-Viele-Beziehung besteht zwischen DocumentType und MetaData. DocumentTypeMetaData ist die Durchgangs-Tabelle. Also:

class DocumentType(models.Model): 
    type_id = models.AutoField(primary_key=True) 
    name = models.CharField('type name', max_length=200) 
    metadata = models.ManyToManyField('MetaData', through='DocumentTypeMetaData') 

class MetaData(models.Model): 
    metadata_id = models.AutoField(primary_key = True) 
    name = models.CharField('metadata name', max_length=200, unique=True) 
    description = models.TextField('description') 

class DocumentTypeMetaData(models.Model): 
    document_type = models.ForeignKey(DocumentType) 
    metadata = models.ForeignKey(MetaData) 
    required = models.BooleanField(default=False) 

    def __str__(self): 
     return '{} {} {}'.format(self.document_type, self.metadata, self.required) 
+0

Danke für die Eingabe! Es läuft gut. Können Sie die Syntax von '{} {} {}'. Format (...) erklären. Aus Gründen der Vollständigkeit möchten Sie möglicherweise das zusätzliche "a" in MetaDaata in der vierten Zeile entfernen. – user1045680

+0

Hier ist eine gute Anleitung: https://pyformat.info/ –

+0

Und ein anderer Leitfaden - https://pyformat.info/ – user1045680

Verwandte Themen