문제

나는 몇 가지 분야는 나에 추가하려는 대부분의 모든 모델에 내 프로젝트입니다.예를 들어,이 필드는"추적 필드"등으로 만든 날짜,업데이트 날짜,그리고"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)
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top