Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 类中的Django排序代码_Python_Django_Django Forms - Fatal编程技术网

Python 类中的Django排序代码

Python 类中的Django排序代码,python,django,django-forms,Python,Django,Django Forms,我需要一个更好的解决方案来实现下面的目标。我有一个表格,这个表格需要规定以下项目的代码的顺序 class ContactCSVModel(CsvModel): first_name = CharField() last_name = CharField() company = CharField() mobile = CharField() group = DjangoModelField(Group) contact_owner = Django

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

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')
这是我现在未接触过的课程:

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):


你能补充更多关于你想要达到的目标的细节吗?我不确定更改中出现的订单代码对您有何帮助。另外,在查看了之后,我找不到任何类似DjangoModelField的内容。我正在尝试执行类似于column.col1.value=CharField()的操作,但这只是分配值,我希望它像打印first_name=CharField()一样打印值col1的值是多少?你是说你试图让你的程序在运行时重写自己?@cms\u mgr是的,我有一个原因,不用担心原因。那将按什么顺序进行?它必须按col1、col2、col3的顺序排列。
对于表单,表单中的字段将按顺序迭代表单的字段(即col1、col2、col3),因此字段将按正确的顺序添加到模型中。setattr?这不是更好吗?对类的贡献对我来说似乎不起作用
setattr
将不起作用,因为相当多的工作是通过元类在模型类上完成的。因为我们在添加字段之后,呃需要复制这项工作
contribute\u to\u class
应该在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']