2010-12-18 10 views
10

Bazı denetleme alanları ile django'da bir model tasarlamaya çalışıyordum. Tarafından oluşturulan, tarafından oluşturulan ve güncellenen gibi. Bu dört sütun, tüm uygulamalarda farklı uygulamalarda tekrarlanacaktır.django, related_name nedir? ve proje genelinde kullanmak için paylaşılan sütunları nasıl oluşturabilirim?

İlk sorum, bu sütunları koymanın ve onlara her ihtiyaç duyduğumda bunları sınıfıma dahil etmenin bir yolu var mı?

İkinci sorum, aşağıdaki kodda related_name özniteliğinin anlamı nedir? bu olmadan kod bir hata döndürür, artı değer tüm uygulama genelinde benzersiz olmalıdır. Her zaman benzersiz olmasını sağlamanın bir yolu var mı?

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") 

Teşekkür

cevap

7

bu deneyin:

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 

Ve sonra diğer modeller için üs olarak kullanmak: http://docs.djangoproject.com/en/dev/topics/db/models/#abstract-base-classes

: Bu bu konuda Django belgelerdir

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) 

Rela için

+1

ted isimleri: http://docs.djangoproject.com/en/dev/topics/db/models/#be-careful-with-related-name – crodjer

İlgili konular