我有一个模型,它定义了某些字段的类型
class FieldType(models.Model): #determines types of fields which are availiable to choose
EMAIL = 'E'
INTEGER = 'I'
STRING = 'S'
TEXT = 'T'
FIELD_TYPE_CHOICES = (
(EMAIL, 'E-mail'),
(INTEGER, 'Integer'),
(STRING, 'String'),
(TEXT, 'Text'),
)
type_of_field = models.CharField(max_length=1,
choices=FIELD_TYPE_CHOICES,
default=STRING)
def is_upperclass(self):
return self.type_of_field in (self.EMAIL, self.TEXT)
所以这是一个有类型选择的字段。
我在model.py中还有一个类,可以让用户添加新字段:
class ColumnHead(models.Model):
newfield = models.CharField(max_length=200, verbose_name='head')
def __unicode__(self):
return u'%s' % (self.newfield)
class ExtraField(models.Model):
add = models.ForeignKey(ColumnHead)
new_field_text = models.TextField(max_length=200, verbose_name='content')
def __unicode__(self):
return u'%s' % (self.new_field_text)
class ChoiceInline(admin.StackedInline):
model = ExtraField
extra = 1 # how many extra choices it could be
class AdminForm(admin.ModelAdmin):
fieldsets = [
('Head', {'fields': ['newfield']}),
]
inlines = [ChoiceInline]
这个概念是使新字段具有所选类型。
所以,唯一要做的就是创建一个函数(我猜),它定义了附加字段的行为。但是由于我的 Django 和 Python 知识很差,我没有任何信心。我不知道如何将它写在哪里(视图或表单或模型?)。我想我需要这样的形式:
class DynamicType(forms.Form):
if field.type == 'E':
and there must be some action...
elif field.type == 'I':
...
我真的搜索了很多,但我找不到这样的东西。或者,也许,我这样做是完全错误的?请帮忙。
编辑:
我在这里对模型进行了一些更改(替换了 ExtraField 类并添加了三种潜在类型):
class ExtraTextField(models.Model):
add = models.ForeignKey(ColumnHead)
new_field_text = models.TextField(max_length=200, verbose_name='content')
def __unicode__(self):
return u'%s' % (self.new_field_text)
class ExtraIntegerField(models.Model):
add = models.ForeignKey(ColumnHead)
new_field_integer = models.IntegerField(max_length=200, verbose_name='content')
def __unicode__(self):
return u'%s' % (self.new_field_integer)
class ExtraDateField(models.Model):
add = models.ForeignKey(ColumnHead)
new_field_date = models.DateField(max_length=200, verbose_name='content')
def __unicode__(self):
return u'%s' % (self.new_field_date)
类 ChoiceInline 管理字段类型。我需要一个这样的函数:如果选择“整数”,让我们使用ExtraIntegerField
,对吗?也许我不应该担心表格......我需要一个直接在模型中的函数?
非常感谢您的任何想法或帮助。