每当ChatRoom
字段更改为Offer accepted
时,我都会尝试创建新的True
,并为该商品创建聊天室。我所做的是一个函数,用于检查accepted
字段是否变为True
,然后创建ChatRoom
。然后是post_save
信号,它创建ChatRoom模型并将字段挂钩在一起。
问题是它是否有效但仅适用于第一个Offer
已接受字段为True的情况。测试后,将另一个Offer
中的已接受字段更改为True
我收到以下错误:
get() returned more than one Offer -- it returned 2!
以下是我的模特:
class Offer(models.Model):
user = models.ForeignKey(User)
post = models.ForeignKey(Post)
comment = models.TextField()
accepted = models.BooleanField(default=False)
def __str__(self):
return "{}".format(self.comment)
class Meta:
verbose_name_plural = "Offers"
class ChatRoom(models.Model):
offer = models.ForeignKey(Offer)
title = models.CharField(max_length=200)
created_at = models.DateTimeField(auto_now_add=True)
class Meta:
verbose_name_plural = "Chat Rooms"
我使用的功能:
def create_chatroom_on_offer_accepted(sender, instance, **kwargs):
if Offer.objects.get(accepted=True):
ChatRoom.objects.create(offer=instance, title="Chatroom")
post_save.connect(create_chatroom_on_offer_accepted, sender=Offer)
现在我理解错误的方式是,它尝试创建ChatRoom
,但实际上并不知道哪个Offer
可以选择,因为有2个。
我如何确保它知道从Offer accepted
创建ChatRoom
的字段?
我想到了save()
模型中的自定义Offer
函数,用于检测accepted
字段中的更改,这会触发post.save()
信号来创建ChatRoom
但我不确切知道这是否有效?
答案 0 :(得分:1)
更改
if Offer.objects.get(accepted=True):
到
if instance.accepted: