我有我的django项目,我需要在model.py中使用if语句的情况。其中一个应用程序将允许用户在另一个应用程序中为文档创建元数据。所以首先我创建一个“元数据”类,它存储了它的名称,标签和字段类型,这是一个选择字段。在另一个类(MetadataValues)中,我创建一个ForeignKey到Metadata类,如果“Metadata”类中的“fieldtype”为“text(0)”,则返回charfield,如果“fieldtype”为“date 1)”。有没有办法做到这一点?,即时新编程,所以我不知道所有的逻辑背后。if ... else语句里面Django模型
下面是代码:
class Metadata(models.Model)
name = models.CharField(max_length=100, unique=True)
label = models.CharField(max_length=100)
METADATA_FIELD_TYPE = (
('0', 'Text'),
('1', 'Date'),
)
fieldtype = models.CharField(max_length=1, choices=METADATA_FIELD_TYPE, default='0')
def __unicode__(self):
return (self.label)
class MetadataValue(models.Model)
metadata = models.ForeignKey(Metadata)
if metadata.fieldtype == '0'
value = models.CharField(max_length=100)
else
value = models.DateField(auto_now=False, auto_now_add=False)
def __unicode__(self):
return (self.metadata.label)
class Document(models.Model)
name = models.CharField(max_length=100, unique=True)
metadata = models.ManyToManyField(MetadataValue)
def __unicode__(self):
return (self.name)
有没有这样做,并具有相同结果的另一种方式? – iDevFS
最简单的方法就是像@guettli回答的方法。另一个要研究的是[模型继承](https://docs.djangoproject.com/en/1.6/topics/db/models/#model-inheritance),它可能允许你想要的东西,如果你继承你的主元数据有几个子类的模型,每种类型一个。 –