2014-12-18 2 views
0

나는 상속 가능한 기능을 구현하기 위해 추상 모델을 만들어 저장 메소드의 슬러그 필드에 저장하려고합니다.Django 추상 모델 필드 이름 선택

일부 모델에는 "name"이라는 필드가 필요하고 일부 모델에는 "title"이라는 필드가 필요하다는 점만 있지만 매우 가까운 것이 있습니다.

class SaveSlug(models.Model) 
    ''' 
    Save an identifying slug based on the title/name field on save 
    ''' 

    name = models.CharField(max_length=30) 
    title = models.CharField(max_length=30) 
    slug = slug = models.SlugField(db_index=True, unique=True) 

    def save(self, *args, **kwargs): 
     self.slug = slugify(self.name) 

     super(SaveSlug, self).save(*args, **kwargs) 

    class Meta: 
     abstract = True 

모든 것이 어떻게 든 "이름"필드 또는 "제목"필드를 포함할지 여부를 하위 모델에 지정하려는 것을 제외하고 잘 작동 : 여기

처럼 프록시 모델이 모습입니다. 어떤 제안? 감사.

답변

1

좋은 방법은 공통 필드에 대해 수퍼 클래스를 사용하고 이름과 제목에 대해 서브 클래스를 사용하는 것입니다.

class Slug(models.Model) 
    slug = models.SlugField(db_index=True, unique=True) 

    class Meta: 
     abstract = True 

class NamedSlug(Slug) 
    name = models.CharField(max_length=30) 

    def save(self, *args, **kwargs): 
     self.slug = slugify(self.name) 
     super(NamedSlug, self).save(*args, **kwargs) 

class TitledSlug(Slug) 
    title = models.CharField(max_length=30) 

    def save(self, *args, **kwargs): 
     self.slug = slugify(self.title) 
     super(TitledSlug, self).save(*args, **kwargs) 
+0

감사합니다. 그래, 그게 개선이야. 가능한 경우 반복되는 매우 유사한 저장 방법을 없애고 싶습니다. – awwester