首页 > 解决方案 > 将对象(字段值)传递到视图中并将其保存在模型上

问题描述

我的表单中有一个名为“rep”的字段,我想要视图,查询等于“rep”的用户并将其传递给我的视图并将其保存到模型中的收件人中:

我尝试了以下行: form.instance.recipient = Message.objects.get(recipient=self.request.rep)

但我明白了

'WSGIRequest' object has no attribute 'rep'

看法 :

视图.py

类撰写(CreateView):

model = Message
form_class=ComposeForm
template_name='django_messages/compose.html'


def form_valid(self,form):
 #   form.instance.recipient = Message.objects.get(recipient=self.request.rep)
    form.instance.sender =self.request.user
    return super(compose,self).form_valid(form)

表格.py

   class ComposeForm(forms.ModelForm):
        """
        A simple default form for private messages.

        """

        class Meta:
           model = Message
          # fields ='__all__'
           fields=['rep','subject','body',]

        #recipient = CommaSeparatedUserField(label=_(u"Recipient"))
      #  subject = forms.CharField(label=_(u"Subject"), max_length=140)
      #  subject='hello'
        body = forms.CharField(label=_(u"Body"),
            widget=forms.Textarea(attrs={'rows': '12', 'cols':'55'}))
        rep=forms.CharField()

模型.py

class Message(models.Model):
    """
    A private message from user to user
    """
    subject = models.CharField(_("Subject"), max_length=140)
    body = models.TextField(_("Body"))
    sender = models.ForeignKey(AUTH_USER_MODEL, related_name='sent_messages', verbose_name=_("Sender"), on_delete=models.PROTECT)
    recipient = models.ForeignKey(AUTH_USER_MODEL, related_name='received_messages', null=True, blank=True, verbose_name=_("Recipient"), on_delete=models.SET_NULL)
    parent_msg = models.ForeignKey('self', related_name='next_messages', null=True, blank=True, verbose_name=_("Parent message"), on_delete=models.SET_NULL)
    sent_at = models.DateTimeField(_("sent at"), null=True, blank=True)
    read_at = models.DateTimeField(_("read at"), null=True, blank=True)
    replied_at = models.DateTimeField(_("replied at"), null=True, blank=True)
    sender_deleted_at = models.DateTimeField(_("Sender deleted at"), null=True, blank=True)
    recipient_deleted_at = models.DateTimeField(_("Recipient deleted at"), null=True, blank=True)

在此处输入图像描述

标签: django

解决方案


在您的视图中检查表单是否为有效,如果是,您可以访问表单数据,如下所示。

if form.is_valid():
    form.cleaned_data['rep']

此时您仍然可以直接从 request.POST 访问未经验证的数据,但经过验证的数据更好。

Django 文档在文档Django docs |中有一个类似的示例。 使用表单

'WSGIRequest' object has no attribute 'rep'

出现此错误的原因是request对象中没有直接包含表单数据,它保存在POST键中。


推荐阅读