userprofile stackedInline/tabularinline إعادة تصميم
سؤال
مرحبا بالجميع وشكرا على القراءة.
لدي مشكلة بسيطة أريد التخلص منها ولم أر أمثلة حيث يتم تحقيق ذلك بعد على الرغم من البحث حول الشبكة لفترة طويلة.
لقد امتدت مؤخرًا مع 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.