簡體   English   中英

如何設置Django Admin在“用戶個人資料”標簽中顯示所有用戶的屬性?

[英]How to set Django Admin to show all User's attributes in his User Profile tab?

我正在研究Django項目。 我有兩種類型的成員(用戶個人資料)-客戶和翻譯。 我想在Django Admin中看到這些配置文件,包括它的User屬性,如usernamesurename等。

現在,當我創建假設UserTranslatorProfile叫Thomas ,我可以看到他的名字,用戶名等UsersAuthDjango 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來查看所有UserUserProfile屬性?

UserTranslatorProfiles添加一個ModelAdmin ,並將usernameemail和其他相關字段添加到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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM