Python 如何创建相关字段?
我有一个模型,你可以在下面看到:Python 如何创建相关字段?,python,django,django-models,Python,Django,Django Models,我有一个模型,你可以在下面看到: class PriceModel(models.Model): name = models.CharField(max_length=12) PriceModel的id从1增加。我想添加与id相关的其他字段。比如我想让它#PM1,#PM2。。。是指#PM+id 如何创建相关字段?我认为您可以在模型序列化程序中添加特殊字段,而不是在模型中添加字段 class PriceModelSerializer(ModelSerializer): ....
class PriceModel(models.Model):
name = models.CharField(max_length=12)
PriceModel
的id从1
增加。我想添加与id
相关的其他字段。比如我想让它#PM1
,#PM2
。。。是指#PM
+id
如何创建相关字段?我认为您可以在模型序列化程序中添加特殊字段,而不是在模型中添加字段
class PriceModelSerializer(ModelSerializer):
....
show_id = serializers.SerializerMethodField(read_only=True)
class Meta:
model = PriceModel
def get_show_id(self):
return '#PM' + self.id
我想添加与id
相关的其他字段。比如我想让它#PM1
,#PM2
。。。表示#PM+id
首先,不能保证对于所有数据库系统,id
总是以1递增。例如,如果数据库使用事务或其他机制,则可能会回滚事务,因此不会获取相应的id
但是,如果您希望某个“字段”始终取决于字段的值(此处为id
),那么我认为@属性
可能是一个更好的主意:
class PriceModel(models.Model):
name = models.CharField(max_length=12)
@property
def other_field(self):
return '#PM{}'.format(self.id)
为什么是一个字段,而不是属性?此外,还不能从根本上保证id增加1。事实上,(在某些数据库中)由于并发事务和回滚,
id
有时会增加2或更多。如果您提供了您想要实现的功能,我们可能会为您提供更多帮助,我认为您可能正在寻找一种可能不正确地为您的目标设计的解决方案。@qg_java_17137:它已经被指定,您可以在需要过滤其他\u字段的查询中执行此操作。请参阅最后一段代码。
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'
)