我的目标是基于一个将模型自己的主键作为参数的函数,为每个新模型生成一个随机连接键。
问题是,每次创建新对象时,joinkey字段都会为数据库中的每个对象重置,而我不希望这样做,我只希望将joinkey添加到正在创建的新对象中。
这是我的模特:
class Project(MainAbstractModel):
users = models.ManyToManyField(User)
title = models.CharField(max_length=25, default="")
@property
def joinkey(self):
return random_int(self.pk)
@joinkey.setter
def joinkey(self, value):
joinkey = models.IntegerField(null=True, unique=True)
def other_user(self):
return self.users.exclude(username=user.username)
这里是random_int函数,以防万一:
def random_int(primarykey):
return int(randint(10000, 99999) + 1000000 + primarykey)
class Project(MainAbstractModel):
users = models.ManyToManyField(User)
title = models.CharField(max_length=25, default="")
joinkey = models.IntegerField(null=True, unique=True)
# Remove all this, from here
@property
def joinkey(self):
return random_int(self.pk)
@joinkey.setter
def joinkey(self, value):
# till here
signals.py
from django.db.models.signals import post_save
from django.dispatch import receiver
# import the random_int method
@receiver(post_save, sender=Project)
def create_joinkey(sender, instance, created, **kwargs):
"""Create a joinkey whenever a project object is created."""
if created:
instance.joinkey = random_int(instance.id)
instance.save()
apps.py
from django.apps import AppConfig
class YourAppConfig(AppConfig):
name = 'yourapp'
# Add this to use signals
def ready(self):
from . import signals