ValueRror مع ميراث متعدد الطاولة في مسؤول Django
-
27-09-2019 - |
سؤال
لقد قمت بإنشاء فئتين جديدتين يرثون إدخال النموذج:
class Entry(models.Model):
LANGUAGE_CHOICES = settings.LANGUAGES
language = models.CharField(max_length=2, verbose_name=_('Comment language'), choices=LANGUAGE_CHOICES)
user = models.ForeignKey(User)
country = models.ForeignKey(Country, null=True, blank=True)
created = models.DateTimeField(auto_now=True)
class Comment(Entry):
comment = models.CharField(max_length=2000, blank=True, verbose_name=_('Comment in English'))
class Discount(Entry):
discount = models.CharField(max_length=2000, blank=True, verbose_name=_('Comment in English'))
coupon = models.CharField(max_length=2000, blank=True, verbose_name=_('Coupon code if needed'))
بعد إضافة هذه النماذج الجديدة إلى المسؤول عبر admin.site.register ، أحصل على ValueRror عند محاولة إنشاء تعليق أو خصم عبر المسؤول. إضافة الإدخالات تعمل بشكل جيد.
خطأ MSG:
valueRror AT/admin/reviews/discount/add/لا يمكن تعيين "'':" Discount.discount "يجب أن يكون مثيل" خصم ". طريقة الطلب: احصل على url ust request: http://127.0.0.1:8000/admin/reviews/discount/add/نوع الاستثناء: قيمة الاستثناء القيمة:
لا يمكن تعيين "" ":" Discount.discount "يجب أن يكون مثيل" خصم ". موقع الاستثناء: /library/python/2.6/site-packages/django/db/models/fields/reled.py في جلس, ، السطر 211 Python قابلة للتنفيذ:/usr/bin/python python الإصدار: 2.6.1
المحلول
كان سبب هذا الخطأ هو أنني استخدمت نفس اسم العمود الذي تم استخدامه بالفعل باسم النموذج. ساهمت كارين ت. في الإجابة التالية في قائمة البريد Django:
يبدو أن المشكلة هي أنك قمت بتسمية حقل في نموذج التعليق الخاص بك بنفس الاسم ، فقط الحالة الأدنى. يوضح التعليق من الدخول ، باستخدام تعدد الطاولة. هذا يضيف حقل OneToOny في التعليق مرة أخرى إلى الدخول ، والذي يحتوي على تأثير جانبي لإضافة سمة "تعليق" إلى الإدخال. هذه هي السمة التي تتيح لك الوصول إلى التعليق المرتبط بالإدخال كنتيجة لحقل OnetOone في التعليق ، وإق
تحدث المشكلة بعد ذلك عندما يكون نموذج التعليق "يرث" جميع الحقول/سمات الإدخال: السمة الموروثة "من الإدخال على ما يبدو يركض على حقل التعليق المحدد. 1.0. لم أجري أي بحث لمعرفة ما إذا كان قد تم الإبلاغ عنه.
بصفتك حلًا ، يمكنك تسمية حقولك شيئًا آخر غير اسم النموذج ، أو يمكنك تحديد حقل OneToOnefield بشكل صريح في نماذج الطفل ، وتحديد Parent_Link = True وشيء آخر غير اسم النموذج بالكامل لـ Relation_Name.
نصائح أخرى
يقول Hunch أنه يمكنك القيام بإعلان فئة الدخول الخاصة بك باعتبارها مجردة ما لم تكن بحاجة إلى إدخال ككائن فعلي أيضًا
...rest of Entry model here...
created = models.DateTimeField(auto_now_add=True) ## ONLY set date when created, not every save
class Meta:
abstract = True
...methods for your model etc...