为什么我的问题不起作用?”异常值:无法将QuerySet用于“对话”:将QuerySet用于“配置文件”

2024-05-04 15:33:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图查询Conversation,它有一个名为members的多对多字段。我这样做是为了将Conversation传递给我的InstantMessage对象,因为该对象有一个名为conversation的外键,该外键连接到Conversation。我需要首先检查成员是否是Conversation的成员,如果是,则获取,如果不是,则创建,然后将其传递到我的InstantMessage对象中。但由于某种原因,我不能质疑它,我不明白为什么

错误

Exception Value:    
Cannot use QuerySet for "Conversation": Use a QuerySet for "Profile".

views.py/message

def message (request, profile_id):

    other_user = get_object_or_404(Profile,id=profile_id)
    members = Conversation.objects.filter(members= request.user).filter(members= other_user)
    conversation, created = Conversation.objects.get_or_create( members = members)

    if request.method == 'POST':

        form = MessageForm(request.POST, instance= request.user, sender=request.user, conversation = conversation, message=message, date=date)
        if form.is_valid():
            form.save()
            return redirect ('dating_app:messages.html')
    else:

        conversation, created = Conversation.objects.get_or_create( members= [request.user, other_user])
        form = MessageForm(instance= request.user, sender=request.user, conversation= conversation, message=message, date=date)

        context = {'form' : form }

        return render(request, 'dating_app:messages.html', context)

models.py/Conversatin和InstantMessage

class Conversation(models.Model):
    members = models.ManyToManyField(settings.AUTH_USER_MODEL)




class InstantMessage(models.Model):


    sender = models.ForeignKey(settings.AUTH_USER_MODEL, related_name= 'sender',on_delete=models.CASCADE )
    conversation = models.ForeignKey(Conversation, on_delete=models.CASCADE)
    message = models.TextField()
    date = models.DateTimeField(auto_now_add=True)


    def __unicode__(self):
        return self.message