2017-08-16 100 views
0

什麼是在Django模型字段中存儲數組的方法?如何將數組存儲在Django Model字段中(不使用PostgreSQL)?

在某些情況下,不使用單獨的模型/表格。這是不需要索引的靜態信息。我想在模型字段中管理簡單的數組。

+0

JSON領域將是你的情況更好。或者,如果你不想做太多的事情,只要將列表弄平並以逗號分隔值存儲即可 –

+0

你真的需要在數據庫中存儲數組嗎?這是一個反模式(儘管可能有一些有效的案例)。 –

+0

這是靜態數據,它們不需要進行索引。我更快地將它包含在同一個模型中。我不想創建一個多對多的外鍵關係。 –

回答

0

你可以寫你自己的領域類 - 是這樣的:

import json 
from django.db import models 

class JSONField(models.TextField): 
    description = "A field to store arbitrary python objects in JSON format" 

    def from_db_value(self, value, expression, connection, context): 
     if value is None or value == "": 
      return None 
     return json.loads(value) 

    def to_python(self, value): 
     if value is None: 
      return value 
     if not isinstance(value, basestring): 
      return value 
     return json.loads(value) 

    def get_prep_value(self, value): 
     return json.dumps(value) 

    def value_to_string(self, obj): 
     value = self._get_val_from_obj(obj) 
     return self.get_prep_value(value) 

    def formfield(self, **kwargs): 
     defaults = {'form_class': JSONFormField} 
     defaults.update(kwargs) 
     return super(JSONField, self).formfield(**defaults) 


class JSONFormField(forms.CharField): 
    widget = forms.Textarea 

    def to_python(self, value): 
     return json.loads(value) 

    def prepare_value(self, value): 
     return json.dumps(value) 

    def clean(self, value): 
     return self.to_python(value) 
+0

謝謝。我會嘗試它並添加數組管理(添加,刪除和更新單個值)。 –

相關問題