2010-12-18 8 views
10

Ich habe versucht, ein Modell im Django mit einigen Auditing-Feldern zu entwerfen. Wie erstellt bei, erstellt von, aktualisiert bei und aktualisiert von. Diese vier Spalten werden für alle meine Modelle in verschiedenen Anwendungen wiederholt.django, was ist related_name für? und wie erstelle ich geteilte Spalten, um über Projekt zu verwenden?

Meine erste Frage, gibt es eine Möglichkeit, diese Spalten zu setzen und sie in meine Klasse aufzunehmen, wenn ich sie brauche?

Meine zweite Frage, was ist der Punkt des Attributs related_name im folgenden Code? Ohne sie wird der Code einen Fehler zurückgeben, und der Wert muss in der gesamten App eindeutig sein. Gibt es einen Weg, um sicherzustellen, dass es immer einzigartig ist?

class Poll(models.Model): 
    question=models.CharField(max_length=300) 
    start_poll_at=models.DateTimeField(null=True) 
    end_poll_at=models.DateTimeField(null=True) 
    is_active=models.BooleanField(default=True) 
    created_at=models.DateField("Created at") 
    created_by=models.ForeignKey(User, db_column="created_by", related_name="poll_user_created_by") 
    updated_at=models.DateTimeField("Updated at") 
    updated_by=models.ForeignKey(User, db_column="updated_by", null=True, related_name="poll_user_updated_by") 


class Choice(models.Model): 
    choice=models.CharField(max_length=200) 
    created_at=models.DateField("Created at") 
    created_by=models.ForeignKey(User, db_column="created_by", related_name="poll_user_created_by") 
    updated_at=models.DateTimeField("Updated at") 
    updated_by=models.ForeignKey(User, db_column="updated_by", null=True, related_name="poll_user_updated_by") 

Dank

Antwort

7

Versuchen Sie folgendes:

class AbstractClass(models.Model): 
    created_at=models.DateField("Created at") 
    created_by=models.ForeignKey(User, db_column="created_by", related_name="poll_user_created_by") 
    updated_at=models.DateTimeField("Updated at") 
    updated_by=models.ForeignKey(User, db_column="updated_by", null=True, related_name="poll_user_updated_by") 
    class Meta: 
     abstract = True 

und dann als Basis für andere Modelle verwenden: http://docs.djangoproject.com/en/dev/topics/db/models/#abstract-base-classes

:

class Poll(AbstractClass): 
    question=models.CharField(max_length=300) 
    start_poll_at=models.DateTimeField(null=True) 
    end_poll_at=models.DateTimeField(null=True) 
    is_active=models.BooleanField(default=True) 

Dies ist die django Dokumentation über dieses ist,

+1

Für rela Ted Namen: http://docs.djangoproject.com/en/dev/topics/db/models/#be-careful-with-related-name – crodjer

Verwandte Themen