gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 08:20:56 26 4
gpt4 key购买 nike

我想覆盖一个保存方法,以便为每次保存创建两个对象而不是一个。我将如何执行以下操作?

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

最佳答案

执行两个 super,如果有自动递增字段或将引发 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 - 在保存方法中创建两个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10964982/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com