小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

python – 如何在單個Django模型中存儲任意類型的值?

 印度阿三17 2019-07-24

說我的問題數量未知.例如:

>天藍色[是/否]
>你[約會]出生的日期
>什么是pi [3.14]
>什么是大型整合[100]

現在,這些問題中的每一個都提出了一個不同但非常類型的答案(布爾值,日期,浮點數,整數).本土django可以在模型中愉快地處理這些問題.

class SkyModel(models.Model):
    question = models.CharField("Is the sky blue")
    answer = models.BooleanField(default=False)

class BirthModel(models.Model):
    question = models.CharField("What date were your born on")
    answer = models.DateTimeField(default=today)

class PiModel(models.Model)
    question = models.CharField("What is pi")
    answer = models.FloatField()

但這有一個明顯的問題,即每個問題都有一個特定的模型 – 所以如果我們以后需要添加一個問題,我必須更改數據庫.呸.所以現在我想得到想象 – 如何通過答案類型轉換自動地設置模型?

ANSWER_TYPES = (
    ('boolean', 'boolean'),
    ('date', 'date'),
    ('float', 'float'),
    ('int', 'int'),
    ('char', 'char'),
)

class Questions(models.model):
    question = models.CharField(()
    answer = models.CharField()
    answer_type = models.CharField(choices = ANSWER_TYPES)
    default = models.CharField()

所以在理論上這將做到以下幾點:

>當我建立自己的觀點時,我會看到答案的類型,并確保我
只有這個價值.
>但是當我想將該答案拉回來時,它將以answer_type指定的格式返回數據.例3.14作為浮點而不是作為str返回.

我該如何進行這種自動轉換?或者有人可以提出更好的方法嗎?

非常感謝??!

解決方法:

我實際上只是遇到了有關可擴展用戶設置的這類問題.我的解決方案是將模型中的類型存儲在CharField中,并使用getter通過智能使用__builtin__和getattr進行類型轉換.這是我的代碼(適應您的需求):

VALUE_TYPE_CHOICES = (
    ("unicode", "Unicode String"),
    ("int", "Integer"),
    ("bool", "Boolean"),
)

class Setting(models.Model):
    name = models.CharField(max_length=100)
    description = models.TextField(blank=True)
    type = models.CharField(max_length=50, choices=VALUE_TYPE_CHOICES)
    default_value = models.CharField(max_length=127)

def get_setting(user, setting_id):
    profile_setting = #get the user's specific setting value here, not relevant
    type = getattr(__builtin__, profile_setting.setting.type)
    if type is bool:
        return type(int(profile_setting.value))
    else:
        return type(profile_setting.value)

那里有一個問題:bool(‘0’)實際上返回True,所以我選擇在類型轉換為bool之前進行類型轉換為int.還有其他方法可以實現這一點,例如使用ast模塊的literal_eval方法.總的來說,這種模式是有效的.

來源:https://www./content-1-349701.html

    本站是提供個人知識管理的網絡存儲空間,所有內容均由用戶發(fā)布,不代表本站觀點。請注意甄別內容中的聯系方式、誘導購買等信息,謹防詐騙。如發(fā)現有害或侵權內容,請點擊一鍵舉報。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多