合并模型字段

时间:2016-10-14 14:33:25

标签: django django-models

我想在只读数据库中添加一个字段。所以,我想创建一个表单的虚拟数据库;

class ReadOnly(models.Model):
    first =  models.CharField(db_column='First')
    second = models.CharField(db_column='Second')

class ExtraStuff(models.Model):
    first =  models.CharField(db_column='First')
    second = models.CharField(db_column='Second')
    combined = first+second

我使用了@property,但由于我无法结合属性和过滤器,我觉得这是一个更好的解决方案。但是,我不知道如何实现这一目标。

3 个答案:

答案 0 :(得分:2)

你正在尝试使用getter的吸气剂吗?

class ExtraStuff(models.Model):
    first =  models.CharField(db_column='First')
    second = models.CharField(db_column='Second')

    @property
    def combined(self):
        return self.first + self.second

答案 1 :(得分:0)

我不是100%肯定你的意思,但如果你只想得到合并的字段:

class ExtraStuff(models.Model):
    first =  models.CharField(db_column='First')
    second = models.CharField(db_column='Second')

@property
def combined(self)
    return self.first + self.second

然后,当您拥有模型时,可以将组合视为只读字段:

my_model = ExtraStruff.objects.get(pk=1)
my_model.combined

答案 2 :(得分:0)

我建议使用annotate() and concat()然后使用filter()。

res.cookie('session_token', results.session, { httpOnly: false, secure: true });
res.redirect(LOGIN_SUCCESS_URL);

您可以向ReadOnly模型添加自定义管理器以避免代码重复

ReadOnly.objects.annotate(combined=Concat('first', 'second', output_field=CharField())).filter(combined='abc123')

然后,您可以在代码中的任何位置使用以下内容。

class ReadOnlyManager(models.Manager):
    def get_queryset(self):
        return super(ReadOnlyManager, self).get_queryset().annotate(combined=Concat('first', 'second', output_field=CharField()))

class ReadOnly(models.Model):
    first =  models.CharField(db_column='First')
    second = models.CharField(db_column='Second')
    objects = models.Manager()
    combined_objects = ReadOnlyManager()