2010-01-31 8 views
6

장고에는 모델에 SlugField를 추가 할 때 설정할 수있는 unique_for_date 속성이 있습니다.Django에서 unique_for_field 슬러그를 만드는 방법은 무엇입니까?

class Example(models.Model): 
    title = models.CharField() 
    slug = models.SlugField(unique_for_date='publish') 
    publish = models.DateTimeField() 

는 무엇 외래 키와 같은 비 날짜 시간 필드 기능의 동일한 종류를 달성하는 가장 좋은 방법이 될 것입니다 : 이것은 슬러그는 사용자가 지정한 필드의 날짜에 대한 고유 원인? 이상적으로,이 같은 것을하고 싶지 :

class Example(models.Model): 
    title = models.CharField() 
    slug = models.SlugField(unique_for='category') 
    category = models.ForeignKey(Category) 

나는 다음과 같은 URL을 만들 수있는이 방법 :

/example/category-one/slug 
/example/category-two/slug 
/example/category-two/slug <--Rejected as duplicate 

내 아이디어 지금까지 :

  • a를 테이블에 대한 슬러그 및 categoryid의 고유 인덱스.이 작업을 수행하려면 장고 외부의 코드가 필요합니다. 삽입/업데이트가 실패 할 때 내장 관리자가 올바르게 처리합니까?

  • 모델에 대한 저장을 무시하고 자체 유효성 검사를 추가하여 복제본이 있으면 오류가 발생합니다.이 방법이 효과가 있을지는 모르겠지만 매우 건조하지는 않습니다.

  • 기본을 상속 한 새로운 슬러그 필드를 만들고 거기에 unique_for 기능을 추가하십시오. 이것은 가장 좋은 방법 인 것 같지만 코어의 unique_for_date 코드를 살펴 보았고 확장하기가 매우 직관적이지 않았습니다.

이 작업을 수행하는 가장 좋은 방법에 대한 아이디어, 제안 또는 의견이 있으십니까?

답변

14

unique_together?

class Example(models.Model): 
    title = models.CharField() 
    slug = models.SlugField(db_index=False) 
    category = models.ForeignKey(Category) 

    class Meta: 
     unique_together = (('slug','category'),) 
     # or also working since Django 1.0: 
     # unique_together = ('slug','category',) 

이 인덱스를 생성하지만, 장고 밖에되지 않습니다) 아니면 내가 점을 그리워 했습니까?

+0

물론 간단합니다. 도움을 주시고 답변을 업데이트 해 주셔서 감사합니다! –

관련 문제