django 模型中的 if...else 语句

iDe*_*vFS 2 python django if-statement django-models

我的 django 项目有一个情况,我需要在 model.py 中使用 if 语句。其中一个应用程序将允许用户为另一个应用程序中的文档创建元数据。所以首先我创建“元数据”类来存储它的名称、标签和字段类型,这是一个选择字段。在另一个类 (MetadataValues) 上,我创建了一个 ForeignKey 到 Metadata 类和一个 if 语句,如果“Metadata”类中的“fieldtype”是“text (0)”,则返回一个字符字段,或者如果“fieldtype”是“date( 1)”。有没有办法做到这一点?我是编程新手,所以我不知道背后的所有逻辑。

这是代码:

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)
Run Code Online (Sandbox Code Playgroud)

gue*_*tli 5

在模型中创建表。并且表具有严格的数据类型。一列中不能有不同的数据类型。您可以使用此解决方案:

class MetadataValue(models.Model)
    metadata = models.ForeignKey(Metadata)
    value_char = models.CharField(max_length=100)
    value_date = models.DateField(auto_now=False, auto_now_add=False)

    @property
    def value(self):
        if ...:
            return self.value_char
         return value_date
Run Code Online (Sandbox Code Playgroud)