Python Django无法分配;u';用户名'&引用;:&引用;“邮件收件人”;必须是一个";“用户”;实例

Python Django无法分配;u';用户名'&引用;:&引用;“邮件收件人”;必须是一个";“用户”;实例,python,django,autofill,django-messages,Python,Django,Autofill,Django Messages,为什么我会犯这个错误 我不知道如何消除这个错误。 如何清理表单字段以允许验证用户名 提前谢谢 class InboxCompany(generic.UpdateView): model = CandidateToJob template_name = 'dashboard/inbox-company.html' form_class = ComposeMessage def get(self, *args, **kwargs): recipie

为什么我会犯这个错误

我不知道如何消除这个错误。 如何清理表单字段以允许验证用户名

提前谢谢

class InboxCompany(generic.UpdateView):

    model = CandidateToJob
    template_name = 'dashboard/inbox-company.html'
    form_class = ComposeMessage

    def get(self, *args, **kwargs):
        recipient = self.get_object(queryset=CandidateToJob.objects.select_related('candidate'))
        if recipient is not None:
            user = User.objects.get(username=recipient.candidate.user.username)
            self.initial = {'recipient': user}
        return super(InboxCompany, self).get(*args, **kwargs)
forms.py

 class ComposeMessage(ModelForm):
    recipient = forms.CharField(
        required=True,
        widget=forms.TextInput(attrs={'class': 'form-control'})
    )
    body = forms.CharField(
        required=True,
        widget=forms.TextInput(attrs={'class': 'form-control'})
    )

    class Meta:
        model = Message

我终于成功了

以下是我的答案:

视图.py

class InboxCompany(generic.UpdateView):

model = CandidateToJob
template_name = 'dashboard/inbox-company.html'
form_class = ComposeMessage

def get_success_url(self):
    return reverse('inboxcompany', kwargs={'pk': self.object.pk})

def get_context_data(self, **kwargs):
    context = super(InboxCompany, self).get_context_data(**kwargs)
    context['message_list'] = Message.objects.inbox_for(self.request.user)
    context['sent_list'] = Message.objects.outbox_for(self.request.user)
    return context

def get_initial(self, *args, **kwargs):
    recipient = self.get_object(queryset=CandidateToJob.objects.select_related('candidate.user.id'))
    self.initial = {'recipient': recipient}
    return self.initial

def get_form_kwargs(self, *args, **kwargs):
    kwargs = {'initial': self.get_initial()}
    return kwargs

def post(self, request, *args, **kwargs):

    form = self.form_class(request.POST)

    if form.is_valid():

        #get data from the form
        data = form.cleaned_data
        body = data['body']

        #auto fill fields
        sender = request.user
        sent_at = timezone.now()
        recipient = self.get_object(queryset=CandidateToJob.objects.select_related('candidate.user.id'))
        user = User.objects.all().get(id=recipient.candidate.user.id)

        a = Message.objects.create(sender=sender, recipient=user, sent_at=sent_at, body=body)
        a.save()


    return HttpResponse('Success')
表单.py

class ComposeMessage(forms.Form):
recipient = forms.CharField(
    required=True,
    widget=forms.HiddenInput(attrs={'class': 'form-control'})
)
body = forms.CharField(
    required=True,
    label="Mensagem",
    widget=forms.TextInput(attrs={'class': 'form-control'})
)

def __init__(self, *args, **kwargs):
    recipient_filter = kwargs.pop('recipient_filter', None)
    super(ComposeMessage, self).__init__(*args, **kwargs)
    if recipient_filter is not None:
        self.fields['recipient']._recipient_filter = recipient_filter


def save(self, sender, parent_msg=None):
    recipients = self.cleaned_data['recipient']
    body = self.cleaned_data['body']
    message_list = []
    for r in recipients:
        msg = Message(
            sender = sender,
            recipient = r,
            subject = subject,
            body = body,
        )
        if parent_msg is not None:
            msg.parent_msg = parent_msg
            parent_msg.replied_at = datetime.datetime.now()
            parent_msg.save()
        msg.save()
        message_list.append(msg)
        if notification:
            if parent_msg is not None:
                notification.send([sender], "messages_replied", {'message': msg,})
                notification.send([r], "messages_reply_received", {'message': msg,})
            else:
                notification.send([sender], "messages_sent", {'message': msg,})
                notification.send([r], "messages_received", {'message': msg,})
    return message_list
模特们

class Message(models.Model):
"""
A private message from user to user
"""
body = models.TextField(_("Mensagem"))
sender = models.ForeignKey(AUTH_USER_MODEL, related_name='sent_messages')
recipient = models.ForeignKey(AUTH_USER_MODEL, related_name='received_messages', null=False, blank=True)
parent_msg = models.ForeignKey('self', related_name='next_messages', null=True, blank=True)
sent_at = models.DateTimeField(null=True, blank=True)

关于这个问题的信息是明确的。您试图将
用户
分配给
字符域
,这没有意义。请记住,您的
receipent
字段是一个外键(我假定),因此它在
Message
表中由一个整数值表示。因此,表示外键关系的表单字段也应该返回一个整数。您是否希望用户能够在表单字段中键入用户名,并让它查找该用户并将其保存为
收件人
?感谢您的快速响应。我不希望用户在收件人字段中键入用户名。即使我更改了id的用户名,它也会返回相同的错误。你想对表单做什么?您是否试图使用用户预填充
receipent
字段,然后验证该用户并在发布表单时将其保存到
receipent
字段?这是正确的。下面是模型:class Message(models.model):body=models.TextField(u(“body”))sender=models.ForeignKey(AUTH\u USER\u model,related\u name='sent\u messages')recipient=models.ForeignKey(AUTH\u USER\u model,related\u name='received\u messages',null=False,blank=True)您需要将其添加到您的帖子中。快速修复方法是将此
self.initial={'recipient':user}
更改为
self.initial={'recipient':user.pk}
。如果你想显示他们的用户名,虽然它更复杂。或者,您可以显示系统中所有用户的下拉列表,并允许他们选择一个