Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/349.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 Django:将模型的pk设置为其列中的默认值_Python_Django_Database_Primary Key - Fatal编程技术网

Python Django:将模型的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

我必须做什么,才能将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 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