سؤال

هل هناك دعم واضح لتوريث جدول واحد في جانغو؟ آخر ما سمعته، وكانت ميزة لا يزال قيد التطوير والنقاش.

هل هناك مكتبات / الخارقة يمكنني استخدامها في هذه الأثناء لالتقاط السلوك الأساسية؟ لدي التسلسل الهرمي تمزج بين كائنات مختلفة. والمثال الكنسي هيكل الشركة مع فئة الموظف فرعية لأنواع من الموظفين، وmanager_id (PARENT_ID) أن يكون تقريب جيد للمشكلة وأنا حل.

في حالتي، وأود أن تمثل فكرة أن الموظف يمكن إدارة موظفين آخرين في حين تدار من قبل موظف آخر. ليست هناك فصول منفصلة للمدير والعمال، الأمر الذي يجعل هذا من الصعب أن تنتشر عبر الجداول. أن الطبقات الفرعية تمثل أنواع من الموظفين من المبرمجين والمحاسبين، والمبيعات، وغيرها، وسوف تكون مستقلة من الذي يشرف على الذين (OK، وأنا أعتقد أنها لم تعد شركة نموذجية في بعض الاحترام).

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

المحلول

ويوجد حاليا نوعان من الميراث في جانغو - MTI (نموذج جدول الميراث) وABC (فئات أساسية مجردة)

وكتبت <لأ href = "http://web.archive.org/web/20090227074910/http://thisweekindjango.com/articles/2008/jun/17/abstract-base-classes-vs-model -tab / "يختلط =" نوفولو noreferrer "> تعليمي على ما يجري تحت غطاء محرك السيارة.

ويمكنك أيضا الرجوع إلى مستندات رسمية عن نموذج الميراث .

نصائح أخرى

وأعتقد أن OP يسأل عن أحادية جدول الميراث كما محددة هنا :

<اقتباس فقرة>   

وقواعد البيانات العلائقية لا تدعم الميراث، وذلك عند تعيين من الكائنات إلى قواعد البيانات لدينا للنظر في كيفية تمثيل الهياكل ميراثنا لطيفة في الجداول العلائقية. عند تعيين إلى قاعدة بيانات علائقية، ونحن نحاول تقليل ينضم التي يمكن تحميل بسرعة عند معالجة هيكل الميراث في جداول متعددة. واحد الميراث الجدول خرائط كافة المجالات من جميع الفئات بنية الميراث في جدول واحد.

وهذا هو، على جدول قاعدة بيانات واحدة لتسلسل هرمي كامل من الطبقات الكيان. جانغو لا يدعم هذا النوع من الميراث.

وانظر محاولة مني:

http://djangosnippets.org/snippets/2408/

<اقتباس فقرة>   

ومضاهاة من "الجدول في التسلسل الهرمي" المعروف أيضا باسم "الميراث جدول واحد" في جانغو. الفئة الأساسية يجب أن يحمل كل المجالات. ليست وسمح لها فرعية لاحتواء أية حقول إضافية وعلى النحو الأمثل ينبغي أن تكون الوكلاء.

وليس بالضبط "الميراث جدول واحد"، ولكن قريب بما فيه الكفاية لكثير من الحالات.

وأعتقد أنك يمكن أن تفعل شيئا أقرب إلى ذلك.

ولقد لتنفيذ حل لهذه المشكلة نفسي، وهنا هو كيف يمكنني حلها:

class Citrus(models.Model)
    how_acidic = models.PositiveIntegerField(max_value=100)
    skin_color = models.CharField()
    type = models.CharField()

class TangeloManager(models.Manager)
    def get_query_set(self):
        return super(TangeloManager, self).get_query_set().filter(type='Tangelo')

class Tangelo(models.Model)
    how_acidic = models.PositiveIntegerField(max_value=100)
    skin_color = models.CharField()
    type = models.CharField()
    objects = TangeloManager()
    class Meta:
        # 'appname' below is going to vary with the name of your app
        db_table = u'appname_citrus'

وهذا قد يكون لها بعض القضايا قفل ... لست متأكدا حقا كيف يعالج جانغو أن من على قمة رأسي. أيضا، لم أكن اختبار حقا رمز أعلاه، هو حصرا لأغراض الترفيه، لوضع نأمل أن على الطريق الصحيح.

وهذا قد يكون الاستخدام: https://github.com/craigds/django-typed- نماذج يبدو أن نوعا من تنفيذ واحدة الجدول الميراث لكنه لا يملك الحد الذي فرعية لا يمكن أن يكون أي حقول إضافية.

وهناك أيضا شوكة يعالج مشكلة عدم التمكن من إنشاء حقول إضافية: https://github.com/KrzysiekJ/django-typed-models

تحديث: أعتقد أن شوكة قد تم دمجها مرة أخرى في

وهنا هو مناقشة الأخيرة على جانغو المطور القائمة البريدية حول STI: https://groups.google.com/forum/#! جي اس / جانغو مطوري / -UOM8HNUnxg / 6k34kopzerEJ

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