[英]How to set Django Admin to show all User's attributes in his User Profile tab?
我正在研究Django
項目。 我有兩種類型的成員(用戶個人資料)-客戶和翻譯。 我想在Django Admin中看到這些配置文件,包括它的User屬性,如username
, surename
等。
現在,當我創建假設UserTranslatorProfile叫Thomas
,我可以看到他的名字,用戶名等Users
在Auth
在Django Admin
和屬於它在配置文件中的其他屬性UserTranslatorProfiles
這是非常不舒服。 (在UserTranslatorProfile
我可以看到它是哪個用戶,但看不到他的屬性,也無法更改它們)。
這兩個配置文件在這里:
class UserTranslatorProfile(models.Model):
user = models.OneToOneField(User)
languages = models.ManyToManyField(Language)
class UserCustomerProfile(models.Model):
user = models.OneToOneField(User)
他們當然是在admin.py
注冊的
因此,問題是:是否有可能,以及如何通過在Django-Admin
單擊UserProfile
來查看所有User
和UserProfile
屬性?
為UserTranslatorProfiles
添加一個ModelAdmin
,並將username
, email
和其他相關字段添加到fields
屬性中。
ModelAdmin
放在admin.py
文件中,它們進一步自定義模型在admin中的顯示方式。
from django.contrib import admin
from myproject.myapp.models import UserTranslatorProfiles # Import your model
class UserTranslatorProfilesAdmin(admin.ModelAdmin):
fields = ('username', 'email, ) # Enter full list of fields here
admin.site.register(UserTranslatorProfiles, UserTranslatorProfilesAdmin)
只需設置ModelAdmin並將其注冊到管理站點
step 1:
在應用程序中創建admin.py(如果不存在)。
step-2:
導入要在管理網站上顯示的模型。
step-3:
創建一個管理模型,並在管理站點中注冊。
from django.contrib import admin
from myproject.myapp.models import Author #import your model
class AuthorAdmin(admin.ModelAdmin):
fields = ('name', 'title', 'view_birth_date')# define-fields
admin.site.register(Author, AuthorAdmin) #now register your custom-admin model
更多
https://docs.djangoproject.com/zh-CN/1.9/ref/contrib/admin/#modeladmin-objects
不幸的是,這比需要/應該要困難得多。 沒有內聯管理員,管理員添加/更改表單僅用於編輯一個模型。
如果能夠更改用戶模型,則可以通過創建自己的自定義User對象(繼承自User)來實現。 然后,在settings.py中,將AUTH_USER_MODEL設置為新模型。 請注意,此操作應在輸入數據和完成首次遷移之前完成(因此,您需要重新開始。)
如果您無法執行此操作,那么我可以考慮采取另外兩個方向:
更容易:為User對象創建一個內聯admin,並將其注冊到您的翻譯對象。 然后,在頁面底部的內聯管理員中將有一行,可用於編輯用戶。 從最終用戶UX的角度來看,我討厭這樣做,但是它可以完成工作。
簡潔:創建一個自定義表單,添加與您要在User模型中編輯的字段相對應的字段,然后在表單的clean和save方法中驗證/保存基礎User對象的方法。 例如,創建表單字段“ tra_username”,“ tra_firstname”,“ tra_password” ...然后,在表單的save方法中(驗證后),對每個字段執行此操作
UserCustomProfile.user.first_name = form.cleaned_data.get("tra_firstname")`
UserCustomProfile.user.save()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.