Python Django:将模型的pk设置为其列中的默认值
我必须做什么,才能将pk指定为默认值?这不起作用:Python Django:将模型的pk设置为其列中的默认值,python,django,database,primary-key,Python,Django,Database,Primary Key,我必须做什么,才能将pk指定为默认值?这不起作用: from django.db import models class TeamMember(models.Model): id = models.AutoField(primary_key=True) order_listing = models.IntegerField(default=id) 如果要在每次保存对象时将order_listing的值重置为id,可以使用以下命令 from django.db import m
from django.db import models
class TeamMember(models.Model):
id = models.AutoField(primary_key=True)
order_listing = models.IntegerField(default=id)
如果要在每次保存对象时将
order_listing
的值重置为id
,可以使用以下命令
from django.db import models
class TeamMember(models.Model):
id = models.AutoField(primary_key=True)
order_listing = models.IntegerField(null=True, blank=True)
def save(self, *args, **kw):
self.order_listing = self.id
return super(TeamMember, self).save(*args, **kw)
或以下代码仅用于首次设置
from django.db import models
from django.dispatch import receiver
from django.db.models.signals import post_save
class TeamMember(models.Model):
id = models.AutoField(primary_key=True)
order_listing = models.IntegerField(null=True, blank=True)
@receiver(post_save, sender=TeamMember)
def order_listing_update(sender, instance, created, **kwargs):
if created:
instance.order_listing = instance.id
instance.save()
问题是在对象保存到数据库之前不会生成id。然而,使用uuid可以解决这个问题
import uuid
from django.db import models
# unique id to be used as pk for TeamMember table.
unique_id = uuid.uuid4().hex
class TeamMember(models.Model):
id = models.CharField(primary_key=True,
default=unique_id, editable=False
)
order_listing = models.IntegerField(default=unique_id)
非常感谢。第二种方法的问题是,当您使用表单元素时,它没有在前端管理仪表板中提供默认值作为预览。在这两种方法中,您都不需要在表单中为前端管理添加订单列表。它可以是只读字段。default=self.id正是在第一个方法中实现的。保存对象时,可以设置一个特定值,然后保存它。(保存方法)谢谢,但不幸的是,这没有帮助,因为订单列表必须
自动增量=True
,而uuid4