객체가 고유한지 확인하고 싶지 않은 경우 사용자가 객체를 저장하려고 할 때 오류가 발생하기를 원합니다 (예 : 관리자를 통해). 고유 한 의미는 객체의 속성 중 일부가 다른 객체의 속성과 동일한 값을 가질 수도 있지만 모든 객체가 다른 객체의 값과 동일하지는 않습니다. 내가 잘못 본게 아니라면Django의 고유 한 객체 DRY
, 난과 같이이 작업을 수행 할 수 있습니다
class Animal(models.Model):
common_name = models.CharField(max_length=150)
latin_name = models.CharField(max_length=150)
class Meta:
unique_together = ("common_name", "latin_name")
를하지만 그때마다 나는 모델을 리팩토링 (예 : 새 필드를 추가하거나 기존 필드의 이름을 변경), unique_together에 할당 된 괄호 안의 필드 목록을 편집해야합니다. 단순한 모델을 사용하면 괜찮습니다. 그러나 실제로는 리팩토링하는 동안 번거로운 작업이됩니다.
unique_together 괄호 안에 필드 이름 목록을 반복해서 입력하지 않아도되는 것을 어떻게 피할 수 있습니까? 모델 필드의 목록을 변수에 전달하고 그 변수를 unique_together 대신 할당 할 수있는 방법이 있습니까?
+1 (또는 추상 기본 클래스가
Model
을 확장하고 메타 클래스를 오버라이드 (override) 파생) - 위대한 문제. 나는 할 수 있다고 생각하지 않지만 다른 사람들의 의견을 듣고 싶어합니다. –+1 - 누군가가 좋은 해결책을 찾을 수 있다면 정말 재미 있습니다. 나는 시도했지만 반사를 통해 작동하지 못했습니다. 왜냐하면 Animal 클래스에서 속성을 읽을 수 없기 때문입니다 (Animal이 완전히 정의되지 않았기 때문에 분명합니다). – FlorianH
jtiai on irc : //irc.freenode.net/django는 질문을 토론하기 위해 시간을내어 "내 자신의"AllUniqueModel "클래스를 추가하고 표준"Model "을 상속하고 모든 필드를 주입하는 데 필요한 일부 메타 클래스 마법을 만들 수 있다고 제안했습니다. unique_togerther 표준 생성 절차에 따라 처리됩니다. ' jtiai가 무엇을 의미하는지 완전히 모르겠지만, 나는 기대했던 것보다 더 복잡한 해결책처럼 들립니다. – sampablokuper