python - 无法分配必须是表单保存上的实例

标签 python django django-forms

我正在创建一个网站,用户可以在其中发布其内容,每个内容都会根据内容 ID 重定向到私有(private)用户以进行用户聊天。

我这样做是为了检索私有(private)聊天中的内容信息。

问题是,当用户提交表单以发布评论时,我收到此错误:

Cannot assign "< User: my_user >": "userComment.seller" must be a "Profile" instance.

在我看来,我将连接的用户保存为买家,并将接收评论的用户保存为卖家

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

这里是models.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)

views.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

forms.py

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,)

最佳答案

您的userComment模型将字段seller作为另一个名为Profile的模型的外键。但传入 msg = userComment(buyer=buyer, seller=seller, comment=comment,) 的买家实例是 User 类型,而不是 Profile 类型.

要么修改 seller = models.ForeignKey(Profile, related_name="seller", null=True)seller = models.ForeignKey(User, related_name="seller", null=True) 或者 检索并传递 Profile 实例。

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

关于python - 无法分配必须是表单保存上的实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41548623/

相关文章:

python - Django Wizard,一步多表单

python - 自动转义 Django 表单错误

python - 使用 python 3 代码在 CSV 文件中查找特定 header

python - 无法使用 Pinterest API Oauth 进行授权

Python 用句点替换缩进

django - 无法在 Django 1.7 中创建 South 数据库模型

Python 类型错误 : 'int' object is not iterable

python - django 同一个查询的 id 和 date 不一致,为什么?

python - django-axes 登录的 IP 地址不显示

python - 重新显示时未显示初始数据的 Django ModelForm