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']