سؤال

هل تتساءل فقط عما إذا كانت هناك طريقة سهلة لإضافة الوظيفة لتكرار قائمة موجودة في واجهة الإدارة؟

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

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

المحلول

أنت تستطيع حفظ باسم بمجرد تمكين إضافة هذا إلى ModelAdmin الخاص بك:

save_as = True

يؤدي هذا إلى استبدال زر "حفظ وإضافة آخر" بزر "حفظ باسم"."حفظ باسم" يعني أنه سيتم حفظ الكائن ككائن جديد (بمعرف جديد)، بدلاً من الكائن القديم.

نصائح أخرى

وهناك حل أفضل (ولكن ليس مدمجة) هنا:

https://github.com/RealGeeks/django-modelclone

ومن README بها:

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

وجانغو مسؤول لديه ميزة save_as أن يضيف زر جديد إلى حسابك   تغيير الصفحة لحفظ نسخة جديدة من هذا الكائن.

     

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

     

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

ويمكنك أيضا تطبيق هذا الأسلوب: https://stackoverflow.com/a/4054256/7995920

في حالتي، مع قيد فريد في حقل 'اسم'، يعمل هذا العمل، ويمكن أن يطلب من أي شكل:


def duplicate_jorn(modeladmin, request, queryset):
    post_url = request.META['HTTP_REFERER']

    for object in queryset:
        object.id = None
        object.name = object.name+'-b'
        object.save()

    return HttpResponseRedirect(post_url)

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