我想在只读数据库中添加一个字段。所以,我想创建一个表单的虚拟数据库;
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,但由于我无法结合属性和过滤器,我觉得这是一个更好的解决方案。但是,我不知道如何实现这一目标。
答案 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()