在Django中创建新模型时,所有模型都会重置

问题描述 投票:0回答:1

我的目标是基于一个将模型自己的主键作为参数的函数,为每个新模型生成一个随机连接键。

问题是,每次创建新对象时,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)
python django
1个回答
0
投票
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
© www.soinside.com 2019 - 2024. All rights reserved.