اذهب إلى المحتوى

Haroun Taha

الأعضاء
  • المساهمات

    156
  • تاريخ الانضمام

  • تاريخ آخر زيارة

أجوبة بواسطة Haroun Taha

  1. إذا كنت تقصد ال Forms الخاصة بال Models في ال Admin الخاصة بالجانغو يمكننا عمل ذلك بواسطة إنشاء   model في models.py سنسميه في حالتنا class ExtraField

    ونعرف بداخله الحقل الذي تريد إضافته عند الضغط على add new field

    ونربطه بعلاقة Foreign Key مع ال model المرتبط بال Form سنسميه في حالتنا Post

    هكذا سيكون الكود داخل ال models.py :

    class ExtraField(models.Model):
        extra_data = models.CharField(max_length=200)
        post = models.ForeignKey(Post, on_delete=models.CASCADE)
    
        def __str__(self):
            return self.extra_data

    ملاحظة : لا تنسى عمل makemigrations and migrate

    من ثم في ملف الadmin.py عند تسجيل ال model المرتبط بالForm

    نقوم بتعريف class ExtraFieldTabularInline :

    from .models import ExtraField, Post
    
    class ExtraFieldTabularInline(admin.TabularInline):
        model = ExtraField

    من ثم نقوم بتعريف class  ال PostAdmin

    بإضافة انه سيقبل Inlines اذن سنضيف ايضاً class PostAdmin :

    class PostAdmin(admin.ModelAdmin):
        inlines = [ExtraFieldTabularInline]
        class Meta:
            model = Post

    من ثم تسجيل form الpost في لوحة التحكم :

    admin.site.register(Post, PostAdmin)

    هكذا أصبح لديك اضافة حقول كما تريد ولقد تم انشاء الزر دون تحديث الصفحة وهذا إجابة لسؤالك اذا كنت تقصد الforms  داخل لوحة التحكم الخاصة بالدجانغو 

    استخدمت في المثال الجدول الmodel المرتبط بال form اسميته Post لتوضيح الفكرة ولكن لك ان تطبق الفكرة على اي جدول او model حسب ما اسميته.

    كانت إجابتي بخصوص الforms داخل لوحة التحكم في دجانقو لم اتطرق الى الforms الخاص بالعرض في التمبلت تحياتي .

    مثال بصري الى النتيجة :_2_1.jpg

  2. في ملف ال admin.py الخاص بال app

    قم بتعريف class مورث بخصائص ال admin

    ومن ثم سنقوم بعمل اعادة تعريف للدالة المسؤولة عن زر الحذف اسم الدالة has_delete_permission

    نكتب داخلها ان ترجع قيمة false
    من ثم إعطاء هذا ال class لدالة الadmin.site.register

    مثال توضيحي داخل ملف admin.py:

    from django.contrib import admin
    
    class DisableDeleteButtonAdmin(admin.ModelAdmin):    
        def has_delete_permission(self, request, obj=None):
            # Disable delete
             return False
    
    admin.site.register(YourModel, DisableDeleteButtonAdmin)

    وهكذا اضمن لك انه تم الغاء تفعيل زر الحذف وتمت الاجابة على سؤالك

    اقتباس

    أريد إزالة زر الحذف Delete Button الموجود في لوحة Admin في مشروع جانغو Django خاص بي، هل توجد طريقة لفعل ذلك؟

    مثال بصري للنتيجة ..

    قبل اضافة الكود :

    1.jpg

    بعد كتابة الكود :2.jpg

    ارجو ان تكون قد فهمت الطريقة تحياتي .

    • أعجبني 1
  3. اهلاً،

    في دالة ال view التي تقوم بتسجيل مستخدم جديد بعد التأكد من إضافة المستخدم بالبيانات المدخلة من ال form تذكر انه بعد عملية تسجيل المستخدم واضافة البيانات أضف هذا الكود:

    from django.contrib.auth import authenticate
    auth_user = authenticate(username=request. POST['username'], password=request. POST['password'])

    بعد عملية تسجيل مستخدم جديد فإن دالة authenticate داخل ال Django  تعطي لها اسم المستخدم وكلمة المرور وهي تقوم بفحص اذا كان المستخدم موجود داخل النظام ام لا فترجع لنا object of user تم حفظه في حالتنا داخل المتغير auth_user.

    ومن ثم نفحص هل المستخدم موجود إذا كان موجود صرح له بتسجيل دخول للنظام باستخدام دالة login ومن ثم انقله لصفحة ال home او اي صفحة تريدها بوضع URL الصفحة مباشرة باستخدام دالة redirect دون جهد منه لقد أصبح مستخدم في النظام ومسجل دخوله لنرى ذلك في الكود لنضيف هذا الكود على الكود السابق:

    from django.contrib.auth import authenticate
    from django.contrib.auth import login
    from django.shortcuts import redirect
    auth_user = authenticate(username=request. POST['username'], password=request. POST['password'])
    If auth_user:
          login(request, auth_user)
          return redirect('/url/home/')

     الذي تم توضيحه اعلاه تمت عملية تسجيل الدخول من داخل دالة تسجيل مستخدم جديد دون ان يطر للذهاب لصفحة تسجيل الدخول ولقد تم تحويله مباشرة للصفحة الرئيسية بإستخدام دالة redirect وهذا اجابة لسؤالك

    اقتباس

    هل توجد طريقة تجعل المستخدم يسجل دخول تلقائيًا في الموقع بعد إتمام عملية التسجيل مباشرة بدون أن يتضطر المستخدم من كتابة بياناته مرة أخرى؟

     اتمنى ان تكون قد وضحت لك الطريقة تحياتي .

    • أعجبني 1
×
×
  • أضف...