콘텐츠 유형 (Object_PK)을 사용하여 일반적인 관계를 만드는 오류
-
06-07-2019 - |
문제
Django의 Contenttype 프레임 워크를 사용하여 My 모델에 대한 일반적인 관계를 만들기 위해 노력하고 있습니다. Django 개발자가 어떻게하는지 살펴본 후 django.contrib.comments.models
나는 그들의 접근/컨벤션을 모방 할 것이라고 생각했다.
~에서 django.contrib.comments.models, 21 행) :
content_type = models.ForeignKey(ContentType,
verbose_name='content type',
related_name="content_type_set_for_%(class)s")
object_pk = models.TextField('object ID')
content_object = generic.GenericForeignKey(ct_field="content_type", fk_field="object_pk")
그것은 그들의 출처에서 가져 왔고, 물론 그들의 출처는 저를 위해 작동합니다 (나는 Object_pk의 저장된 잘 저장된 댓글이 있습니다 (실제로 정수). 그러나 나는 그 동안 오류가 발생합니다. syncdb
끝나는 테이블 생성에서 :
_mysql_exceptions.OperationalError: (1170, "BLOB/TEXT column 'object_pk' used in key specification without a key length")
그들이 할 수있는 이유와 나는 할 수없는 아이디어가 있습니까?
주위를 둘러 보면, 나는 그것을 알아 차렸다 문서 실제로 상태 :
모델에 관련된 모델에서 1 차 키 값을 저장할 수있는 필드를 제공하십시오. (대부분의 모델의 경우, 이것은 정수 필드 또는 긍정적 인 integerfield를 의미합니다.)
이 필드는 일반적인 관계에 관여 할 모델의 주요 키와 동일한 유형. 예를 들어, Integerfield를 사용하는 경우 Charfield를 기본 키로 사용하는 모델과 일반적인 관계를 형성 할 수 없습니다.
그러나 왜 그들이 나를 할 수 있습니까?!
감사.
추신 : 나는 심지어이 세 필드로 AbstractBaseModel을 만들어 냈습니다. abstract=True
그리고 그것을 사용 (그것과 관련이있는 경우) ... 같은 오류.
해결책
그 정말 긴 질문을 입력 한 후에 나는 mySQL을보고 오류가 다음과 같은 것을 깨달았습니다.
class Meta:
unique_together = (("content_type", "object_pk"),)
분명히, 나는 두 가지 방법을 가질 수 없습니다. 나를 찢어 버린다. 나는 내 떠나는 것이 더 나은지에 대한 새로운 질문을 열어야 할 것입니다. object_pk
옵션이 열리거나 (텍스트 필드를 기본 키로 사용한다고 가정하거나) unique_togetherness
...