簡體   English   中英

獲取 Django 模型字段的 Python 類型?

[英]Get Python type of Django's model field?

如何獲取 Django 模型的字段類的相應 Python 類型?

from django.db import models

class MyModel(models.Model):
    value = models.DecimalField()

type(MyModel._meta.get_field('value'))  # <class 'django.db.models.fields.DecimalField'>

我正在尋找如何獲得字段值的相應 python 類型 - 在這種情況下為decimal.Decimal

任何的想法 ?

ps 我試圖用字段的default屬性解決這個問題,但它可能不適用於所有沒有定義字段默認值的情況。

我不認為你可以在那里以編程方式決定實際的 python 類型。 部分原因是python的動態類型。 如果您查看用於將值轉換為 python 對象的文檔,則字段沒有硬預定義類型:您可以編寫一個自定義字段,根據數據庫值返回不同類型的對象。 模型字段的文檔指定了每個字段類型對應的 Python 類型,因此您可以“靜態地”執行此操作。

但是為什么需要提前知道 Python 類型才能序列化它們呢? 序列化模塊應該為您執行此操作,只需將您需要序列化的對象扔給它們即可。 Python 是一種動態類型語言。

一個丑陋的選擇是檢查字段的 repr():

if 'DecimalField' in repr(model._meta.get_field(fieldname)):
    return decimal.Decimal
else:
    ...

但是,您必須針對所有類型單獨進行此操作。

暫無
暫無

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

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