我在models.py中有一個欄位,它接受在一個類中確定的選擇:
我在models.py中有一個欄位。
from apps.users.constants import UserChoices
class User(models.Model)。
choices = models.CharField(max_length=10, blank=True, choices=UserChoices.choice(), default=UserChoices.PUBLIC_USER)
選擇類是這樣的:
from django.utils.translation import ugettext_lazy as _
class UserChoices:
PRIVATE_USER = "private_user".
PUBLIC_USER = "public_user" @classmethod
def choices(cls)。
return (
(cls.PRIVATE_USER, _("私人用戶"))。
(cls.PUBLIC_USER, _("Public User") )。
)
我的疑問是,我怎樣才能把這個UserChoices類繼承給另一個選擇類,以便用另一個選項來擴展它。
我試著做了以下作業:
我試著做了以下作業。
class ExtendedChoices(UserChoices)。
OTHER_CHOICE = "other_choice"。
@classmethod: OTHER_CHOICE = "other_choice"
def choices(cls)。
return (
UserChoices.choice()。
(cls.OTHER_CHOICE, _("Other choice") )。
)
但是它給了我一個遷移錯誤:
users.OtherModel.other_choice: (fields.E005) 'options'必須是一個包含(實際值,人類可讀的名稱)圖元的可迭代檔案。
顯然這個例子是簡化的,實際的代碼在原始類上有40多個選擇,在擴展類上有20多個。
uj5u.com熱心網友回復:
你需要從父類中解包。你可以用一個asterisk(*)來做:
class ExtendedChoices(UserChoices)。
OTHER_CHOICE = "other_choice"。
@classmethod: OTHER_CHOICE = "other_choice"
def choices(cls)。
return (
*UserChoices.choice(), # ←一個星號來解包元組。
(cls.OTHER_CHOICE, _("Other choice") )。
)
如果我們在另一個元組中解包一個元組,我們構造一個元組,該元組包含解包的元組的所有專案作為新元組的元素。例如:
>>> x = (1,4, 2)
>>> (x, 5)
((1, 4, 2), 5)
>>> (*x, 5)
(1, 4, 2, 5)
如果我們不使用星號,它將簡單地把x看作一個元組,因此我們構造一個2元組,元組x作為第一個元素。
如果我們拆開第一個元組,我們得到一個4元組,其中前三個元素來自x,然后是5。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/307457.html
標籤:
