모델에서 나는 일반적으로 친숙한 URI에 대한 "uuid"필드와 "slug"필드를 넣습니다. Django 추상 모델 상속
내가이 저장 될 때의 저장() 메소드를 재정 의하여 "SomeModel"라는 이름의 모델, 나는 UUID 및 슬러그를 생성 할 수있는 말 : 그것은 일반 모델에 잘 작동class SomeModel(models.Model):
...
def save(self, *args, **kwargs):
if not self.uuid:
uuid = shortuuid.uuid()[:10]
while SomeModel.objects.filter(uuid=uuid).exists():
uuid = shortuuid.uuid()[:10]
self.uuid = uuid
if not self.slug:
self.slug = slugify(self.title)[:500].rstrip('-')
super(SomeModel, self).save(*args, **kwargs)
. 다음
class SomeAbstractModel(models.Model):
class Meta:
abstract = True
def save(self, *args, **kwargs):
...
: 그리고 지금은 추상적 인 모델을 가지고 싶습니다 난 그냥 간단하게 대체 할 수처럼
class SomeModel(SomeAbstractModel):
class Meta(SomeAbstractModel.Meta):
...
문제는 추상적 모델에서 보이는됩니다
while SomeModel.objects.filter(uuid=uuid).exists():
while SomeAbstractModel.objects.filter(uuid=uuid).exists():
와
becau se 추상 모델에는 관리자가 없습니다.
이 경우 궁금한 점은 모든 모델의 save() 메소드에서 중복 코드가 발생하는 것을 피할 수있는 방법입니다. 또한 확실하지 않은 경우
while SomeModel.objects.filter(uuid=uuid).exists():
은 uuid가 있는지 여부를 확인하는 가장 좋은 방법입니다. 당신이 SomeModel (SomeAbstractModel)를 만들 때, 단지 상속하지 않고 처음부터 클래스 메타를 만들
while self.__class__.objects.filter(...):
pass
작품을 감사 – devfeng