تعليقات المطور
جانغو-logicaldelete هو التطبيق صغير وبسيط هو أن رميت معا للحصول على بعض إعادة استخدامها من شيء أقوم به تقريبا في كل مشروع وكل نموذج I إنشاء & nbsp؛ يمكنك من السهل جدا للبيانات جيدة للحصول على حذف ويكون غير قابل للاسترداد. كما انه من السهل جدا لإصلاح هذا عن طريق تجاوز حذف طريقة للنموذج () وعادل ضعف السجلات وحذف ومن ثم الاستفادة من مدراء جانغو لتجاوز السلوك الافتراضي بحيث لا يتم إرجاع أن العناصر المحذوفة منطقيا في querysets.
هناك نوعان من الاستثناءات ومع ذلك، لأني وجدت من المفيد لهذه القاعدة.
على & nbsp؛ 1. في المشرف أود أن أرى كل شيء مع مؤشرا على ما إذا كان قد تم حذفه، مع القدرة على تصفية وصولا الى السجلات النشطة فقط، (أو حذف لهذه المسألة).
على & nbsp؛ 2. ما زلت اعتقد انه هو طلب صالح عند عنصر يتم جلب لمن قبل انها قيمة المفتاح الأساسي، أن الهدف يجب أن تعود، حتى إذا تم وضع علامة على أنه حذف.
باستخدام جانغو-logicaldelete
باستخدام التطبيق هو بسيط جدا:
على & nbsp؛ 1. وضع المجلد الفرعي logicaldelete في بيثون المسار الخاص بك.
على & nbsp؛ 2. ترث من logicaldelete.models.Model لجميع الموديلات التي ترغب في المشاركة في هذه الوظيفة.
على & nbsp؛ 3. إنشاء و / أو التسجيل مدراء لكل من هذه النماذج باستخدام logicaldelete.admin.ModelAdmin
إضافي
يتم التعامل مع حذف المنطقية تاريخ ختم عمود date_removed. بالإضافة إلى ذلك، سوف يتم ملؤها من الأعمدة DATE_CREATED وdate_modified للسهولة.
الامتدادات الممكنة
يمكنك بسهولة فرعية هاتين الطبقتين لتوفير وظائف عامة ومفيدة لالنماذج الخاصة بك.
مفتاح UUID الابتدائية
أنا عادة باستخدام حقول UUID المفاتيح الأساسية بلدي لأنها تمكنني من قشرة الجداول بلدي إذا وعندما كنت في حاجة إليها، بالإضافة إلى أنها توفر معرف التعتيم على البيانات الخاصة بي (الناس لا يمكن تحديد عدد من وجوه معينة لدي في قاعدة البيانات الخاصة بي، وإذا كنت لا تريد لهم أن يعرفوا، ولكن ببساطة تبحث معرف عدد صحيح في URL).
تسلسل الميدان
وفي كثير من الأحيان أجد أنه من المفيد أن يكون هناك حقل عدد صحيح على نماذج بلدي التي تسمح للوتسلسل تسيطر عليها صراحة. أنا عادة تنفيذ هذا بمثابة تنفيذ نوع تنازلي حيث يتم فرز البيانات من الأعلى إلى الأقل من حيث القيمة التسلسل.
من أجل تنفيذ هذا وكنت فرعية كلا من نموذج وModelAdmin، حيث النموذج سيكون إضافة بسيطة واضحة من IntegerField، وModelAdmin، فإن تجاوز get_query_set، على أن تفعل شيئا مثل:
فئة SequencedModel (logicaldelete.models.Model):
على & nbsp؛ تسلسل = models.IntegerField ()
فئة MyLogicalDeletedManager (logicaldelete.models.LogicalDeletedManager):
على & nbsp؛ مواطنه get_query_set (النفس):
& nbsp؛ إذا self.model:
على & nbsp؛. QS = السوبر (MyLogicalDeletedManager، النفس) .get_query_set () تصفية (date_removed__isnull = صحيح)
& nbsp؛ إذا SequencedModel في inspect.getmro (self.model):
على & nbsp؛ QS = qs.order_by ('- تسلسل')
على & nbsp؛ QS عودة
ما هو الجديد في هذا الإصدار:
كل شيء تغير إلى all_with_deleted على LogicalDeleteManager
انتقل LogicalDeleteManager من logicaldelete.models إلى logicaldelete.managers
إزالة وحذف كل شيء querysets من logicaldelete.models.Model
المتطلبات:
بيثون
جانغو
لم يتم العثور على التعليقات