簡體   English   中英

Django 從數組生成模型字段

[英]Django generate Model Fields from an Array

我需要從這樣的字符串數組生成一個數據庫模型:

strings = ['String 1', 'String 2', ..., 'String N-1', 'String N']

我的數據庫中需要一個具有這種形狀的表格

ORIGIN | STRING 1 | STRING 2 |...| STRING N
 char  |   char   |   char   |...| char

我像這樣創建了我的模型類:

class FixedCharField(models.Field):
  def __init__(self, max_length, *args, **kwargs):
    self.max_length = max_length
    super(FixedCharField, self).__init__(max_length=max_length, *args, **kwargs)

  def db_type(self):
    return 'char(%s)' % self.max_length


class MyModel(models.Model):
    strings = get_my_array() # aux function to generate the array
    origin = FixedCharField(max_length=3)
    for string in strings:
        string = FixedCharField(max_length=3)

如您所見,我需要每個列名的固定大小為 3,因此我使用了在此鏈接中找到的自定義 FixedCharField Fixed Char Field

我的問題是,這行得通嗎? 這是執行此操作的正確方法嗎?

這將不起作用,因為您每次都會覆蓋item變量,直到它最后一次被覆蓋。 這將是 Django 在類初始化后“看到”的項目。

您可以為此更新類中的locals()字典:

class MyModel(models.Model):
    strings = get_my_array()
    for string in strings:
        locals()[string] = FixedCharField(max_length=3)

但它仍然看起來非常丑陋。 在這里將您的元素貢獻給模型可能會更好:

class MyModel(models.Model):
    # other fields
    pass

for string in get_my_array():
    FixedCharField(max_length=3).contribute_to_class(MyModel, string)

暫無
暫無

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

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