Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何创建相关字段?_Python_Django_Django Models - Fatal编程技术网

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'
)