Django:을 만드 믹스 인한 재사용할 수 있는 모델 Fields
-
14-11-2019 - |
문제
나는 몇 가지 분야는 나에 추가하려는 대부분의 모든 모델에 내 프로젝트입니다.예를 들어,이 필드는"추적 필드"등으로 만든 날짜,업데이트 날짜,그리고"active"플래그입니다.나를 만들려고 시도하 Mixin 할 수 있는가를 각각 모델 클래스할 수 있는 내용을 추가 이러한 추가 필드를 통해 여러 유산입니다.그러나 때는 객체를 인스턴스를 만들어진,그것은 나타납니다 내 모델는 필드에 추가 되었을 통해 믹스인 표시하는 방법으로 물체의 보다는 오히려 데이터베이스 필드가 있습니다.
In [18]: Blog.objects.all()[0].created
Out[18]: <django.db.models.fields.DateTimeField object at 0x10190efd0>
여기에 무엇이 내 모델는 다음과 같다:
from django.db import models
class Blog(models.Model, TrackingFieldMixin):
name = models.CharField(max_length=64)
type = models....
class TrackingFieldsMixin():
active = models.BooleanField(default=True,
help_text=_('Indicates whether or not this object has been deleted.'))
created = models.DateTimeField(auto_now_add=True)
modified = models.DateTimeField(auto_now=True)
class Meta:
abstract = True
그래서 이 나타나지 않는다.누구든지 어떻게 알 수 있을 만드는 재사용할 수 있는 mixin 에 대한 일반적인 모델의 필드의 유사하십니까?은 거기에서 결함이 접근법?
덕분에 당신은 도움말 Joe
업데이트:참고하는 내 모델는 계획을 사용하여 mixin 에서 사용 MPTT 모델 할 수 있도록 단순히 내 TrackingFieldMixin mixin 기본 클래스를 상속에서만습니다.
class Post(MPTTModel, TrackingFieldMixin):
post_name = models....
post_type = models...
해결책
추상적인 모델의 필요를 상속서 model.Model
제대로 작동하려면:
class TrackingFieldsMixin(models.Model):
또한신 active
BooleanField
나는 추가 deleted_on
DateTimeField
그렇게 기록할 수 있을 때 기록을 삭제되었습니다.할 수 있는 다음 추가 인스턴스에서 속성 여부를 확인하려면 활성:
@property
def active(self):
return self.deleted_on is None
에서 쿼리고/또는 사용자 지정 관리자:
Blog.objects.filter(deleted_on__isnull=True)
제휴하지 않습니다 StackOverflow