簡體   English   中英

Django字段-如何基於另一個字段的值為字段的db值添加前綴?

[英]Django Fields - How to prefix a field's db value based on another field's value?

我正在嘗試根據is_staff的值對用戶對象的用戶名字段命名空間。

例如;

  • 用用戶名“ Username123”和is_staff = False保存用戶將在數據庫中創建一個值“ customer:Username123”的用戶對象
  • 用用戶名“ Username123”和is_staff = True保存用戶將在數據庫中創建一個用戶對象,其值為“ staff:Username123”

這樣做的原因是可以通過我正在使用的Web應用程序上的活動目錄或Oauth2對用戶進行授權。 由於用戶名必須唯一,因此我嘗試使用名稱空間來避免兩個用戶與空間用戶名發生沖突,但要獲得不同來源的授權。

我已經研究過使用from_db_valueget_prep_value方法,但是這些方法不提供用戶對象(因此,無法確定is_staff值)。 pre_save提供對用戶模型的訪問,但是在查詢例如.filter(username='Username123', is_staff=True)來過濾具有用戶名staff:Username123 .filter(username='Username123', is_staff=True)

我也嘗試過使用戶名字段不是唯一的,但由於django警告對此,因此認為這不是一個好主意。

是否有人對如何根據is_staff標志保存和查詢前綴值有任何建議?

在模型中創建一個屬性,該屬性根據is_staff值呈現所需的值:

@property
def namespace(self):
   return '%s:%s' % ('staff' if is self.is_staff else 'customer', self.username)

我會避免將namespace保存在數據庫中,因為如果發生某些更改,則必須保留該值。 例如,用戶不再需要任何人員或名稱空間創建中的其他更改。

在您的代碼中僅引用user.namespace

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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