>

다양한 이미지 유형을 캡슐화하는 모델이있는 Django 기반 앱을 작성 중입니다. 다음과 같이 조명기로로드합니다 :

[
  {
    "model": "app.ImageTypeModel",
    "pk": 1,
    "fields": {
      "type": "PNG",
      "dims": 1
    }
  },
  {
    "model": "app.ImageTypeModel",
    "pk": 2,
    "fields": {
      "type": "Custom",
      "dims": 100
    }
  },
  {
    "model": "app.ImageTypeModel",
    "pk": 3,
    "fields": {
      "type": "JPEG",
      "dims": 1
    }
  },
  {
    "model": "app.ImageTypeModel",
    "pk": 4,
    "fields": {
      "type": "BMP",
      "dims": 1
    }
  }
]

해당 모델 선언은 다음과 같습니다.

class ImageTypeModel(models.Model):
    type = models.CharField(max_length=100)
    dims = models.IntegerField()
    class Meta:
        db_table = "image_type"

또한 다음과 같이 다양한 이미지 인스턴스가 있습니다 (간단하게하기 위해 일부 필드를 제거했습니다) :

class ImageModel(models.Model):
    type = models.ForeignKey(ImageTypeModel)
    class Meta:
        db_table = "images"

이러한 각 이미지 유형에 대해 지정하려는 속성이 다릅니다. 예를 들어, Custom 유형의 이미지 , 나는 각각 특정 데이터 유형 (정수, 문자열, 부동 소수점, 부동 소수점 벡터 등) 일 수있는 다양한 속성을 가질 수 있습니다. 이를 정의하는 한 가지 방법은 각 데이터 유형에 대한 테이블과 각 이미지 유형에 대한 추가 테이블 (이 테이블 구성 테이블이라고 함)을 갖는 것입니다. 여기서 각 행은 특성 이름 및 연관된 데이터 유형입니다. 그런 다음이를 기반으로 자동 양식을 생성 할 수 있습니다.

그러나 이미지 형식과 관련 구성 테이블을 연결하는 방법을 잘 모르겠습니다. 따라서 원래 조명기 예제에서 데이터베이스 테이블 이름을 다른 필드로 추가하는 것이 좋습니다? 또는 이러한 각 구성 테이블에 대한 모델을 작성해야하지만, 조명기 코드에서이 모델을 참조하는 방법을 잘 모르겠습니다.

그러므로 이런 종류의 문제에 접근하는 방법에 대한 조언을 찾고이 metadata 왕을 지정해야합니다.  백엔드의 객체 및 장고 모델 및 픽스처에 적합한 방법.

  • 답변 # 1

    추상 기본 클래스에서 일반적인 동작을 정의 할 수 있으며 하위 클래스에서는 다른 특성 만 지정합니다. Django는 모델에 대한 추상 기본 클래스를 지원합니다.

    class Image(models.Model):
        """ A graphic image. """
        name = models.CharacterField(max_length=1024)
        suffix = NotImplemented
        class Meta:
            abstract = True
    
    class SVGImage(Image):
        """ A graphic image in Scalable Vector Graphics (SVG) format. """
        suffix = ".svg"
        version = models.CharacterField(max_length=20)
    
    class JPEGImage(Image):
        """ A graphic image in Joint Picture Experts Group (JPEG) format. """
        suffix = ".jpeg"
        resolution = models.IntegerField()
    
    

    지금 Image  모델은 데이터베이스에 표시되지 않지만정의 된 모든 기능을 하위 클래스에서 사용할 수 있습니다. 그래서 SVGImage 의 인스턴스   name 것입니다 suffixversion  속성; JPEGImage 의 사례   name 것입니다 suffixresolution  속성.

    <시간>

    제외 : Django 모델은 models 라는 모듈에 있습니다. 따라서 불필요한 …Model 를 추가해서는 안됩니다.  클래스 이름의 접미사.

    대신 fooapp.models.JPEGImage  충분히 명확하다. 또한 지정하지 않아도 데이터베이스 테이블의 이름이 올바르게 지정됩니다.

관련 자료

  • 이전 android - 변수를 사용하는 드로어 블 리소스
  • 다음 windows xp - Git Bash에 복사하여 붙여 넣는 방법