أخطاء إنشاء العلاقات العامة باستخدام أنواع المحتوى (object_pk)

StackOverflow https://stackoverflow.com/questions/1628173

سؤال

أنا أعمل على استخدام جانغو ContentType الإطار إلى إنشاء بعض العلاقات العامة عن بلدي النماذج ؛ بعد النظر في كيفية جانغو المطورين تفعل ذلك في django.contrib.comments.models فكرت في أن يقلد نهجها/الاتفاقيات:

من جانغو.contrib.تعليقات.نماذج, سطر 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")

أي أفكار السبب في أنها يمكن أن تفعل ذلك وأنا لا أستطيع ؟

بعد النظر في جميع أنحاء لاحظت مستندات في الواقع الدولة:

إعطاء نموذج الحقل الذي يمكن تخزين الأولية-قيمة المفتاح من النماذج لتكون المتصلة.(معظم النماذج ، هذا يعني IntegerField أو PositiveIntegerField.)

يجب أن يكون هذا الحقل من نوع المفتاح الأساسي من النماذج التي سوف تشارك في عام العلاقة.على سبيل المثال, إذا كنت تستخدم IntegerField, أنت لن تكون قادرة على تشكيل عامة علاقة مع نموذج يستخدم CharField باعتباره المفتاح الأساسي.

ولكن لماذا يفعلون ذلك وليس أنا؟!

شكرا

PS:حتى أنني حاولت خلق AbstractBaseModel مع هذه الحقول الثلاثة ، مما يجعل abstract=True واستخدام ذلك (في حال لم تفعل شيئا مع ذلك) ...نفس الخطأ.

هل كانت مفيدة؟

المحلول

بعد أن كتبت ذلك حقا مسألة طويلة نظرت إلى mysql و أدركت أن الخطأ كان النابعة من:

class Meta:
    unique_together = (("content_type", "object_pk"),)

على ما يبدو, أنا لا يمكن أن يكون ذلك في كلا الاتجاهين.مما يترك لي ممزقة.سوف تضطر إلى فتح جديد السؤال حول ما إذا كان من الأفضل أن أترك بلدي object_pk الخيارات مفتوحة (أفترض استخدام الحقل النصي باعتباره المفتاح الأساسي?) أو من الأفضل أن فرض unique_togetherness...

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top