سؤال

مرحبا بالجميع وشكرا على القراءة.

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

لقد امتدت مؤخرًا مع userprofile ، لذا يبدو أن admin.py يبدو هكذا:

from django.contrib import admin
from django.contrib.auth.models import User
from models import UserProfile
from django.contrib.auth.admin import UserAdmin

admin.site.unregister(User)

class UserProfileInline(admin.StackedInline):
                model = UserProfile

class UserProfileAdmin(UserAdmin):
#               fieldsets = [
#                       (None,  {'fields': ['image']}),
#                       ('Avatar', {'fields': ['text'], 'classes': ['collapse']}),
#               ]
                inlines = (UserProfileInline,)

admin.site.register(User, UserProfileAdmin)

و models.py مثل هذا:

from django.db import models
from django.contrib.auth.models import User

class UserProfile(models.Model):
        # Required
        user = models.ForeignKey(User, unique=True)
        image = models.ImageField(upload_to='media/users/', blank=True, help_text="Your face")
        text = models.TextField(blank=True, help_text="Write something about yourself")

In an app called users that is referred to by settings.py with:

    AUTH_PROFILE_MODULE = users.UserProfile

1

في الأساس ما أريد تحقيقه هو التخلص من خط المكدس رقم 1 الذي يظهر في المسؤول. السبب في أنني أستخدم StackedInline بدلاً من tabularinline هو أنني أحصل على "حذف؟" عمود إلى اليمين وأجد أنه اختياريًا ، لذا أود إما استبعاد ذلك أو التخلص من الترقيم رقم 1 في StackedInline.

هذا ما يبدو في "العالم الحقيقي" .. (مميز باللون الأحمر)

مرصوصة:hxxp: //i28.tinypic.com/2lsadkg.jpg

مجدول:hxxp: //i27.tinypic.com/4lybs.jpg

2

ايضا. أتساءل لماذا لا يمكنني استخدام FieldSets عندما قمت بتحميل ملف userprofile.py في admin.py. يقول ببساطة إن الحقل غير موجود. هل يجب علي استدعاء الحقول بشكل مختلف عن Django/Contrib/Auth/Admin.py حيث رأيته يعمل؟

إذا كنت تشعر أن هناك طريقة أكثر كفاءة للقيام بذلك ، فأخبرني. أنا منفتح لجميع الإجابات.

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

المحلول

1

أعتقد أنك تعرض للإرضاء هنا. إذا كنت بحاجة تمامًا إلى التحكم في هذه التفاصيل الدقيقة ، فيجب عليك إنشاء طرق عرضك بدلاً من استخدام المسؤول. خلاف ذلك هو ما تريده لأن Tabular لا معنى له بالنسبة للعلاقات الفردية.

2

لقد تمكنت من استخدام Fieldsets في ملفات تعريف المستخدمين. يبدو أن الفرق الوحيد بين الكود الخاص بي وكملك هو أنني أستخدم Tuple بدلاً من Dict. إليكم المقارنة:

class UserProfileInline(admin.StackedInline):
    model = UserProfile

class MyUserAdmin(UserAdmin):
    inlines = [UserProfileInline]
    fieldsets = (
        (None, {'fields': ('username', 'password')}),
        (_('Personal info'), {'fields': ('first_name', 'last_name', 'email')}),
        (_('Permissions'), {'fields': ('is_staff', 'is_active', 'is_superuser')}),
        (_('Important dates'), {'fields': ('last_login', 'date_joined')}),
        (_('Groups'), {'fields': ('groups',)}),
    )
    exclude = ['user_permissions']

تعديل:

لقد قمت بفحص سريع و "#1" قادم من قالب المشرف.

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

يمكن العثور على القالب المضمن المكدسة في django/contrib/admin/templates/admin/edit_inline/stacked.html

هذا يعني أنه يمكنك نسخ القالب إلى دليل القوالب الخاص بك كـ templates/admin/edit_inline/stacked.html وسيتم تحميل هذا بواسطة Django في وقت التشغيل بدلاً من قالب الأسهم.

بعد نسخ تحرير نسختك المحلية لإزالتها #{{ forloop.counter }} على الخط 9.

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