如何在 Django 模型中创建一个字段,将特定字符串连接到每个记录的 ID?
How can I make a field in Django models that concatenates a specific string to each record's id?
我在 Django 模型中创建了一个字段 facility_id
,它应该将左侧的特定字符串 "ACCTS-"
与右侧每个记录的 id
连接起来,
我的模型class如下:
class Facility(models.Model):
...
id = models.BigAutoField(primary_key=True)
facility_id = models.CharField(max_length=50, default=print(f'{"ACCTS-"}{id}'), editable=False)
...
我希望 facility_id
字段存储特殊且可读的人性化 facility_id 格式:ACCTS-1
、ACCTS-2
、ACCTS-3
, ...对应每个个体id
.
迁移没有引发任何错误,但是当我尝试在 Django Admin 中为此 table 创建记录时,我得到 IntegrityError
的:
IntegrityError at /admin/ACCTS_CLYCAS/facility/add/
NOT NULL constraint failed: ACCTS_CLYCAS_facility.facility_id
我该如何解决这个问题,或者什么是解决我的问题的最简单方法。
The migrations didn't throw any errors, however When I try to create the records for this table in the Django Admin
这是有道理的,因为您已经设置了 default=None
。实际上,print(…)
returns None
并且只将值打印到标准输出通道 (stdout)。因此,它不会在 id
的值前面加上 ACCTS
.
如果 facility_id
都是以 ACCTS-
为前缀的 id,您可以使用 @property
代替:
class Facility(models.Model):
id = models.BigAutoField(primary_key=True)
<strong>@property</strong>
def <strong>facility_id</strong>(self):
return f'ACCTS-{self.id}'
您也可以尝试使用 post 保存信号。
将 blank = True 添加到 facility_id,然后使用 post 保存信号更新 facility_id 的值。
您可以观看本教程了解如何使用Django Signals
我在 Django 模型中创建了一个字段 facility_id
,它应该将左侧的特定字符串 "ACCTS-"
与右侧每个记录的 id
连接起来,
我的模型class如下:
class Facility(models.Model):
...
id = models.BigAutoField(primary_key=True)
facility_id = models.CharField(max_length=50, default=print(f'{"ACCTS-"}{id}'), editable=False)
...
我希望 facility_id
字段存储特殊且可读的人性化 facility_id 格式:ACCTS-1
、ACCTS-2
、ACCTS-3
, ...对应每个个体id
.
迁移没有引发任何错误,但是当我尝试在 Django Admin 中为此 table 创建记录时,我得到 IntegrityError
的:
IntegrityError at /admin/ACCTS_CLYCAS/facility/add/
NOT NULL constraint failed: ACCTS_CLYCAS_facility.facility_id
我该如何解决这个问题,或者什么是解决我的问题的最简单方法。
The migrations didn't throw any errors, however When I try to create the records for this table in the Django Admin
这是有道理的,因为您已经设置了 default=None
。实际上,print(…)
returns None
并且只将值打印到标准输出通道 (stdout)。因此,它不会在 id
的值前面加上 ACCTS
.
如果 facility_id
都是以 ACCTS-
为前缀的 id,您可以使用 @property
代替:
class Facility(models.Model):
id = models.BigAutoField(primary_key=True)
<strong>@property</strong>
def <strong>facility_id</strong>(self):
return f'ACCTS-{self.id}'
您也可以尝试使用 post 保存信号。
将 blank = True 添加到 facility_id,然后使用 post 保存信号更新 facility_id 的值。
您可以观看本教程了解如何使用Django Signals