编程语言
首页 > 编程语言> > python-在保存方法中创建两个对象

python-在保存方法中创建两个对象

作者:互联网

我想覆盖一个保存方法,以便为每个保存创建两个对象,而不是一个.我该怎么办?

class Message(models.Model):
    thread = models.ForeignKey('MessageThread')
    content = models.CharField(max_length=5000)
    sender = models.ForeignKey(UserProfile, related_name='message_sender')

    # filled in automatically on save()
    timestamp = models.DateTimeField(auto_now_add=True)
    recipient = models.ForeignKey(UserProfile, related_name='message_recipient')
    status = models.CharField(choices=MESSAGE_STATUS, max_length=64, default='unread')

    def save(self, *args, **kwargs):
        """
        When a message is created, this will save TWO objects of it.
        """
        sender = self.sender
        thread_initiator = self.thread.initiator
        thread_recipient = self.thread.recipient
        if sender == thread_recipient:
            self.recipient = thread_initiator
        else:
            self.recipient = thread_recipient
        self.status = 'unread' 
        super(Message, self).save(*args, **kwargs)

        # saving the second object creates an error
        Message.objects.create(thread=self.thread, content=self.content, sender=sender, recipient=sender, status='read')

--> RuntimeError: maximum recursion depth exceeded while calling a Python object

解决方法:

进行两个超级运算,如果存在自动递增字段或将引发IntegrityError,请不要忘记增加pk.

def save(self, *args, **kwargs):
    sender = self.sender
    thread_initiator = self.thread.initiator
    thread_recipient = self.thread.recipient
    if sender == thread_recipient:
        self.recipient = thread_initiator
    else:
        self.recipient = thread_recipient
    self.status = 'unread' 
    super(Message, self).save(*args, **kwargs)

    # instead of Message.objects.create(thread=self.thread, content=self.content, sender=sender, recipient=sender, status='read')
    self.pk +=1
    self.sender = sender
    self.recipient = sender
    self.status = 'read'
    super(Message, self).save(*args, **kwargs)

标签:python,django,mysql,django-models
来源: https://codeday.me/bug/20191201/2079203.html