我有一个你看到的模型:
class PriceModel(models.Model):
name = models.CharField(max_length=12)
PriceModel
的ID从1
增加。我想添加与id
相关的其他字段。比如我希望#PM1
,#PM2
...表示#PM
+ id。
如何创建相关字段?
答案 0 :(得分:2)
我想添加与
id
相关的其他字段。比如我希望#PM1
,#PM2
...表示#PM + id
。
首先,不保证所有数据库系统,id
总是增加1。例如,如果数据库使用事务或其他机制,则可能会回滚事务,因此永远不会采用相应的id
。
如果你想要一些"字段"这总是取决于字段的值(这里是id
),那么我认为@property
可能是一个更好的主意:
class PriceModel(models.Model):
name = models.CharField(max_length=12)
@property
def other_field(self):
return '#PM{}'.format(self.id)
现在,如果我们有一些PriceModel
,那么some_pricemodel.other_field
将返回'#PM123'
给定(id
为123
)。好的是,如果id
被更改,那么属性也会改变,因为它是每次都根据字段计算的。
一个潜在的问题是我们不使用此属性进行查询,因为数据库不知道存在此类属性。但是我们可以定义注释:
from django.db.models import Value
from django.db.models.functions import Concat
PriceModel.objects.annotate(
other_field=Concat(Value('#PM'), 'id')
).filter(
other_field__icontains='pm1'
)
答案 1 :(得分:1)
我认为你可以在你的模型序列化器中添加一个特殊字段,而不是在模型中添加一个字段。
class PriceModelSerializer(ModelSerializer):
....
show_id = serializers.SerializerMethodField(read_only=True)
class Meta:
model = PriceModel
def get_show_id(self):
return '#PM' + self.id