【发布时间】:2014-05-16 23:00:58
【问题描述】:
这是我的Conversationmodel:
class Conversation(models.Model):
creator = models.ForeignKey(User, related_name='created_by')
participants = models.ManyToManyField(User, blank=True, null=True)
我想在创建对话后自动将随机用户添加到participants 属性中。
为此,我首先尝试使用post_save 信号进行信号捕获。但是participants无法正确保存,我也遇到了必须在信号捕获方法within中禁用信号,避免无限递归的问题,感觉很错了。
在我的第二次尝试中,我覆盖了save()方法:
def save(self, force_insert=False, force_update=False, using=None, update_fields=None):
# first, save normally, so the object exists
super(Conversation, self).save(force_insert=force_insert, force_update=force_update, using=using, update_fields=update_fields)
# then add some conversationalists
if self.participants.count() < 2:
new_participant = User.objects.order_by('?')[:1].get()
self.participants.add(self.creator)
self.participants.add(new_participant)
现在有两种不同的行为,取决于我使用的是 Django-Admin 还是控制台:
- 当我创建一个新的 Conversation 对象,设置它的
creator并在控制台中调用save()时,一切正常。 - 当我在管理员中创建一个新对话时,设置它的
creator并点击“保存”按钮,保存后参与者列表仍然是空的。
我的第一直觉是管理员以某种方式覆盖了这种行为。这可能是正确的吗?
【问题讨论】: