2013-07-18 70 views
0

默認情況下從項目目錄運行manage.py createsuperuser命令我可以創建超級用戶,但.is_superuser標誌是缺省的django標誌,它與超級用戶或其他用戶不同。Django .is_superuser字段權限

我不想使用它,因爲我在整個應用程序中使用該標誌來顯示設置菜單。相反,我在我的userprofile models中添加了一個字段,該字段爲.is_primary_user

有沒有什麼辦法可以控制的,這樣如果我運行createsuperuser評論,它應該更新.is_primary_user字段的userprofile模型中的「1」?

回答

3

是的,您必須捕捉用戶模型post_save的信號,並且如果更改了.is_superuser,您還需要更改.is_primary_user

Brian Neal指出,你不應該在應用程序中使用.is_superuser標誌。它意味着與Django權限系統(超級用戶擁有所有權限)和/或Django管理員一起使用。

編輯:我沒有測試過,但它應該是這樣的:

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

# method for updating 
def update_primary_user(sender, instance, **kwargs): 
    if instance.pk: 
      return 
    if instance.is_superuser and not instance.userprofile.is_primary_user: 
      instance.userprofile.is_primary_user = True 
      instance.userprofile.save() 

# register the signal 
pre_save.connect(update_primary_user, sender=User) 
+0

上述代碼正在創建配置文件。默認情況下,我在創建new_primary_user時將.is_primary_user值設置爲「0」如何將值設置爲1,我應該編寫手動處理代碼。 – user2086641

+0

在這種情況下,你應該使用pre_save,並添加一個「和instance.pk」如果update_primary_user –

+0

海,我嘗試使用if instance.pk並將post_save更改爲pre_save,is_primary_user字段未更新.Any幫助會很大。 – user2086641

1

有兩個選項,因爲我看到它。一個是用於配置文件和用戶的後保存信號。另一個是覆蓋配置文件保存方法。後者只會處理新用戶。

用戶模型或配置文件模型的post save signal可用於更新配置文件模型is_primary_user。那麼不僅在您運行createsuperuser程序時,您可以相應地更新配置文件,但是如果您授予現有用戶超級用戶權限,則它也將更新該用戶配置文件。使用用戶模型信號的問題是配置文件可能尚未創建。您可能需要爲兩種模型都捕獲信號。一個用於更新用戶(用戶模型),另一個用於創建用戶(配置文件模型)。

另一個選項是覆蓋配置文件保存方法。您可以檢查它所鏈接的user.is_superuser,然後相應地更新is_primary_user字段。

另一方面,您可能只想創建第一個超級用戶,在這種情況下,您首先需要檢查是否存在任何超級用戶。

我同意另外兩張海報,最好不要以這種方式使用is_superuser標誌。