Python 无法分配表单保存时必须是实例

Python 无法分配表单保存时必须是实例,python,django,django-forms,Python,Django,Django Forms,我正在创建一个用户可以发布其内容的网站,每个内容根据内容id重定向到一个私人用户对用户聊天 我这样做是为了在私人聊天中检索内容信息 问题是,当用户提交表单以发布注释时,我会出现以下错误: 无法分配“”:“userComment.seller”必须是“Profile”实例 p = Profile.objects.get(user=seller) msg = userComment(buyer=buyer, seller=p, comment=comment) 在我看来,我将连接的用户保存为买家,

我正在创建一个用户可以发布其内容的网站,每个内容根据内容id重定向到一个私人用户对用户聊天

我这样做是为了在私人聊天中检索内容信息

问题是,当用户提交表单以发布
注释时,我会出现以下错误:

无法分配“”:“userComment.seller”必须是“Profile”实例

p = Profile.objects.get(user=seller)
msg = userComment(buyer=buyer, seller=p, comment=comment)
在我看来,我将连接的用户保存为
买家
,将收到评论的用户保存为
卖家

如何修复此错误?下面的代码我做错了什么

这是模型。py

class Profile(models.Model):
    name = models.CharField(max_length=120)
    user = models.OneToOneField(User, null=True, blank=True)

class Gig(models.Model):
    profile = models.ForeignKey(Profile, null=True)
    title = models.CharField(max_length=100, unique=True)

class userComment(models.Model):
    buyer = models.ForeignKey(User, related_name="buyer", null=True)
    seller = models.ForeignKey(Profile, related_name="seller", null=True)
    comment = models.TextField(max_length=255, null=True)
视图.py

def addComment(request, gig_id):
    gig = Gig.objects.get(id=gig_id)
    username = gig.profile.user

    if request.method == 'POST':
        form = userCommentForm(request.POST, request.FILES)
        if form.is_valid():
            form.save(buyer=request.user)
            return HttpResponseRedirect('/')

    else:
        form = userCommentForm()
        form.fields['seller'].initial = username
class userCommentForm(forms.Form):
    seller = CommaSeparatedUserField(label=_(u"seller"))
    comment = forms.CharField(label=_(u"comment"), widget=forms.Textarea())

    def save(self, buyer):
        sellers = self.cleaned_data['seller']
        comment = self.cleaned_data['comment']
        message_list = []
        for seller in sellers:
            msg = userComment(buyer=buyer, seller=seller, comment=comment,)

            if seller == buyer:
                print('-----------------------------------------------')
                print('same')

            if None is not None:
                msg.parent_msg = None
                None.save()
            msg.save()
            message_list.append(msg)

        return message_list
forms.py

def addComment(request, gig_id):
    gig = Gig.objects.get(id=gig_id)
    username = gig.profile.user

    if request.method == 'POST':
        form = userCommentForm(request.POST, request.FILES)
        if form.is_valid():
            form.save(buyer=request.user)
            return HttpResponseRedirect('/')

    else:
        form = userCommentForm()
        form.fields['seller'].initial = username
class userCommentForm(forms.Form):
    seller = CommaSeparatedUserField(label=_(u"seller"))
    comment = forms.CharField(label=_(u"comment"), widget=forms.Textarea())

    def save(self, buyer):
        sellers = self.cleaned_data['seller']
        comment = self.cleaned_data['comment']
        message_list = []
        for seller in sellers:
            msg = userComment(buyer=buyer, seller=seller, comment=comment,)

            if seller == buyer:
                print('-----------------------------------------------')
                print('same')

            if None is not None:
                msg.parent_msg = None
                None.save()
            msg.save()
            message_list.append(msg)

        return message_list

回溯:

File "C:\Python34\projects\tryTen\private_comment\views.py" in addComment
  31.             form.save(buyer=request.user)

File "C:\Python34\projects\tryTen\private_comment\forms.py" in save
  15.             msg = userComment(buyer=buyer, seller=seller, comment=comment,)

您的CommaSeparatedUserField用户字段似乎是您尚未与我们共享的自定义字段。然而,很容易看出,您的数据实际上是一个卖家名称列表,而不是
卖家
实例。另一方面,如果它包含id,则可以执行以下操作:

msg = userComment(buyer=buyer, seller_id=seller, comment=comment,)
如果只是名字的话

sl = Profile.objects.get(name=seller)  # adjust this according to your model
msg = userComment(buyer=buyer, seller_id=sl, comment=comment,)

您的
userComment
型号将feild
seller
作为名为
Profile
的另一型号的外键。但是传入的买方实例
msg=userComment(买方=buyer,卖方=seller,comment=comment,)
User
类型,而不是
Profile
类型

要么修改
seller=models.ForeignKey(Profile,related\u name=“seller”,null=True)
seller=models.ForeignKey(User,related\u name=“seller”,null=True)
或 检索并传递一个
配置文件
实例

p = Profile.objects.get(user=seller)
msg = userComment(buyer=buyer, seller=p, comment=comment)

检查卖方的类型。以及将其转换为类型
Profile
的方法。