python - Django 在类中排序代码

标签 python django django-forms

我需要一个更好的解决方案来实现下面我想要实现的目标。我有一个表单,该表单需要规定以下项目的代码顺序...

class ContactCSVModel(CsvModel):
    first_name = CharField()
    last_name = CharField()
    company = CharField()
    mobile = CharField()
    group = DjangoModelField(Group)
    contact_owner = DjangoModelField(User)

例如...

  class ContactCSVModel(CsvModel):
    if form.col1.value == "first_name":
        first_name = CharField()
    elif form.col1.value == "last_name":
        last_name = CharField()

或者也许

  class ContactCSVModel(CsvModel):
         [column.col1.value] = CharField()
         [column.col2.value] = CharField()

但这不会起作用,因为它会尝试分配值而不是使其成为first_name = CharField()等

如您所见,我最终对 col2、col3 等再次执行此操作,并最终得到“很多”的“if 语句”。

有更好的方法吗,例如?

谢谢。

Forms.py

COL_CHOICES = [
    ('NONE', 'No Import'),
    ('first_name', 'First Name'),
    ('last_name', 'Last Name'),
    ('company', 'Company'),
    ('mobile', 'Mobile Number'),
    ('email', 'Email Address'),
    ]


class ConfiguratorForm(forms.Form):
    col1 = forms.TypedChoiceField(choices=COL_CHOICES, initial='first_name')
    col2 = forms.TypedChoiceField(choices=COL_CHOICES, initial='first_name')
    col3 = forms.TypedChoiceField(choices=COL_CHOICES, initial='first_name')
    col4 = forms.TypedChoiceField(choices=COL_CHOICES, initial='first_name')
    col5 = forms.TypedChoiceField(choices=COL_CHOICES, initial='first_name')

这是我现在未受影响的类(class):

def import_data(column, *args, **kw):
    # make custom ContactCSVModel
    class ContactCSVModel(CsvModel):
        # IF column == x



        first_name = CharField()
        mobile = CharField()
        last_name = CharField()
        company = CharField()
        group = DjangoModelField(Group)
        contact_owner = DjangoModelField(User)

        class Meta:
            delimiter = ","
            dbModel = Contact
            update = {'keys': ["mobile", "group"]}

    return ContactCSVModel.import_data(*args, **kw)

最佳答案

您可以稍后将字段添加到模型中吗,例如:

class ContactCSVModel(CsvModel):
    pass

for form_field in form:
    field_name = form_field.value
    model_field = CharField()
    model_field.contribute_to_class(ContactCSVModel, field_name)

例如(使用 Django 1.5):

from django.db import models 

class ContactCSVModel(models.Model): 
    pass 

for field_name in ('first_name', 'mobile', 'last_name'): 
    model_field = models.CharField() 
    model_field.contribute_to_class(ContactCSVModel, field_name) 

print [f.name for f in ContactCSVModel._meta.fields]

# prints:
[u'id', 'first_name', 'mobile', 'last_name']

关于python - Django 在类中排序代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16078352/

相关文章:

python - 如何在 Python 中生成昨天和今天午夜的 POSIX 值?

python - 没有模型形式的django模型实例

python - Django 表单、 View 和 forms.py 不能一起工作

python - 在基于类的 View (CBV) 中引用当前用户

python - 'unlink()' does not work in Python' s shared_memory on Windows

python - Django 发布时间到数据库

python - 如何在不同形状的 ndarray 列表上使用 numpy.amax() ?

python - 如何保持从 Pandas DataFrame 到字典的行顺序

python - Foreach 循环使用 BeautifulSoup/Mechanize/Python 获取下一页链接

python - 如何在 Ubuntu 14.04 中通过 Apache 网络服务器运行两个 django 项目?