set form.instance.article = request.POST.get('article')
and add article in fields too like fields = ('comment', 'article')
it should work flawlessly.Regards Britto On Sun, 28 Apr 2019 at 09:30, Atsunori Kaneshige <[email protected]> wrote: > Hi, Britto, > > Thank you very much for your reply! > I tried form.instance.article = *self.*request.POST.get('article'), I > still got an error shown below. > > > RelatedObjectDoesNotExist at /articles/2/comment/ > > Comment has no article. > > Request Method: POST > Request URL: http://127.0.0.1:8000/articles/2/comment/ > Django Version: 2.1.5 > Exception Type: RelatedObjectDoesNotExist > Exception Value: > > Comment has no article. > > Exception Location: > /Users/Koitaro/.local/share/virtualenvs/MMBlog-58h299OP/lib/python3.6/site-packages/django/db/models/fields/related_descriptors.py > in __get__, line 188 > Python Executable: > /Users/Koitaro/.local/share/virtualenvs/MMBlog-58h299OP/bin/python > Python Version: 3.6.5 > > > When I tried print(dir(self.request.POST)), I got the below. > > > ['__class__', '__contains__', '__copy__', '__deepcopy__', '__delattr__', > '__delitem__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', > '__ge__', '__getattribute__', '__getitem__', '__getstate__', '__gt__', > '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', > '__len__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', > '__reduce_ex__', '__repr__', '__setattr__', '__setitem__', '__setstate__', > '__sizeof__', '__str__', '__subclasshook__', '__weakref__', > '_assert_mutable', '_encoding', '_getlist', '_mutable', 'appendlist', > 'clear', 'copy', 'dict', 'encoding', 'fromkeys', 'get', 'getlist', 'items', > 'keys', 'lists', 'pop', 'popitem', 'setdefault', 'setlist', > 'setlistdefault', 'update', 'urlencode', 'values'] > > > When I tried print(self.request.POST.items), I got the blow, for example. > > > <bound method MultiValueDict.items of <QueryDict: {'csrfmiddlewaretoken': > ['qRGlWdPTX9qxpFidwKT8bvY3vWXx5caE2wJZSQTtyWodYSICmW4yMwXG3FAn9oQk'], > 'comment': ['I am maru'], 'article': ['2']}>> > > > I typed the message ('I am maru') and needed to specify the article that I > made the message to. I needed to set fields = ('comment','article',) in > CommentCreateView, otherwise, I get an error like the below. > > > RelatedObjectDoesNotExist at /articles/2/comment/ > > Comment has no article. > > Request Method: POST > Request URL: http://127.0.0.1:8000/articles/2/comment/ > Django Version: 2.1.5 > Exception Type: RelatedObjectDoesNotExist > Exception Value: > > Comment has no article. > > Exception Location: > /Users/Koitaro/.local/share/virtualenvs/MMBlog-58h299OP/lib/python3.6/site-packages/django/db/models/fields/related_descriptors.py > in __get__, line 188 > Python Executable: > /Users/Koitaro/.local/share/virtualenvs/MMBlog-58h299OP/bin/python > > > I tried other listed attributes, but seems like I could not find 'article' > information. > When I set the article field and choose an article, I get like 'article': > ['2']. > > Regarding user, by adding form.instance.author = self.request.user, > 'author' was automatically set without choosing it in the form. But, I did > not see any author information when I tried several > print(self.request.POST.XXX) > thing. > > When I tried print(self.request.user), the user was printed in terminal. > But, when I tried print(self.request.POST.user), I got an error like below. > > > AttributeError at /articles/2/comment/ > > 'QueryDict' object has no attribute 'user' > > Request Method: POST > Request URL: http://127.0.0.1:8000/articles/2/comment/ > Django Version: 2.1.5 > Exception Type: AttributeError > Exception Value: > > 'QueryDict' object has no attribute 'user' > > > > When I set the article field, and choose an article in the comment form, I > tried print(form.instance.article). Then, the article I chose was printed > in the terminal. > So, seems like form.instance.article is correct. > > But how can I set the right part? > form.instance.article = self.response.XXXXX??? > > Where is the user information? > I successfully can access to user by self.request.user, but currently I > have no idea how to access to article information. > > Sorry, any advice I can try would be really appreciated! > > Looking forward to hearing advice. > > Best regards, > > Nori > > On Saturday, April 27, 2019 at 10:41:14 PM UTC-4, SimpleHumble wrote: >> >> The best way to debug it is add a print function with dir function just >> before the error occurring line and see what are available attributes in >> request.POST object like this print(dir("========", request.POST, >> "========")) . Also without dir function will show what is available in >> POST. >> Look at the terminal after running development server and your action to >> trigger error, see what are the attributes available for your request. >> >> Probably you have to set form.instance.article = request.POST.get('article') >> would work. >> >> Regards >> Britto >> >> >> On Sun, 28 Apr 2019 at 02:56, Atsunori Kaneshige <[email protected]> >> wrote: >> >>> Sorry, when I make a comment, I get this error. >>> >>> Any advice would be really appreciated! >>> >>> >>> >>> AttributeError at /articles/2/comment/ >>> >>> 'WSGIRequest' object has no attribute 'article' >>> >>> Request Method: POST >>> Request URL: http://127.0.0.1:8000/articles/2/comment/ >>> Django Version: 2.1.5 >>> Exception Type: AttributeError >>> Exception Value: >>> >>> 'WSGIRequest' object has no attribute 'article' >>> >>> Exception Location: >>> /Users/Koitaro/Desktop/Web_Development/MMBlog/articles/views.py >>> in form_valid, line 75 >>> Python Executable: >>> /Users/Koitaro/.local/share/virtualenvs/MMBlog-58h299OP/bin/python >>> Python Version: 3.6.5 >>> Python Path: >>> >>> ['/Users/Koitaro/Desktop/Web_Development/MMBlog', >>> '/Users/Koitaro/.local/share/virtualenvs/MMBlog-58h299OP/lib/python36.zip', >>> '/Users/Koitaro/.local/share/virtualenvs/MMBlog-58h299OP/lib/python3.6', >>> >>> '/Users/Koitaro/.local/share/virtualenvs/MMBlog-58h299OP/lib/python3.6/lib-dynload', >>> '/Applications/anaconda3/lib/python3.6', >>> >>> '/Users/Koitaro/.local/share/virtualenvs/MMBlog-58h299OP/lib/python3.6/site-packages'] >>> >>> Server time: Sat, 27 Apr 2019 21:24:45 +0000 >>> >>> >>> On Saturday, April 27, 2019 at 5:07:19 PM UTC-4, Atsunori Kaneshige >>> wrote: >>>> >>>> I really appreciate if anybody could give me an advice about form_valid. >>>> >>>> Here is what I want to do. >>>> I am making a simple blog. >>>> I am making simple features: >>>> 1) only superuser can create articles. >>>> 2) logged-in users can make comments to articles. >>>> >>>> I followed along tutorials and mostly done. >>>> *But last thing I want to do is that when users make comments to any >>>> articles, I want author field and article field to be automatically set.* >>>> *Currently, users need to choose author field and article field to make >>>> comments as well as comment texts.* >>>> >>>> The tutorial that I followed along uses form_valid and by using >>>> form_valid, now I don't need to choose author. >>>> But I have been struggling with how to automatically set article field >>>> by using form_valid. >>>> >>>> I have a simple models.py and views.py below. >>>> >>>> <models.py> >>>> >>>> class Article(models.Model): >>>> title = models.CharField(max_length=255) >>>> body = models.TextField() >>>> date = models.DateTimeField(auto_now_add=True) >>>> author = models.ForeignKey( >>>> get_user_model(), >>>> on_delete=models.CASCADE, >>>> ) >>>> >>>> def __str__(self): >>>> return self.title >>>> >>>> def get_absolute_url(self): >>>> return reverse('article_detail', args=[str(self.id)]) >>>> >>>> class Comment(models.Model): # new >>>> article = models.ForeignKey( >>>> Article, >>>> on_delete=models.CASCADE, >>>> related_name = 'comments', >>>> ) >>>> comment = models.CharField(max_length=140) >>>> author = models.ForeignKey( >>>> get_user_model(), >>>> on_delete=models.CASCADE, >>>> ) >>>> >>>> def __str__(self): >>>> return self.comment >>>> >>>> def get_absolute_url(self): >>>> return reverse('article_list') >>>> >>>> <views.py> >>>> ...(not showing all) >>>> #for comment >>>> class ArticleCommentCreateView(LoginRequiredMixin, CreateView): >>>> model = Comment >>>> template_name = 'article_comment_new.html' >>>> fields = ('comment',) >>>> login_url = 'login' >>>> >>>> def form_valid(self, form): >>>> form.instance.author = self.request.user >>>> *form.instance.article = self.request.article* >>>> return super().form_valid(form) >>>> >>>> I keep getting errors with this code. >>>> I know that *form.instance.article = self.request.article* is >>>> something wrong, but I am having hard time to figure out how to set article >>>> field to be automatically set. >>>> >>>> >>>> Please give any advice about this. >>>> I really appreciate. >>>> >>>> Looking forward to hearing from anyone. >>>> >>>> Best regards, >>>> >>>> Nori >>>> >>>> >>>> >>>> >>>> -- >>> You received this message because you are subscribed to the Google >>> Groups "Django users" group. >>> To unsubscribe from this group and stop receiving emails from it, send >>> an email to [email protected]. >>> To post to this group, send email to [email protected]. >>> Visit this group at https://groups.google.com/group/django-users. >>> To view this discussion on the web visit >>> https://groups.google.com/d/msgid/django-users/352ed4ec-fcf8-4590-ae0b-9c97e29d80ef%40googlegroups.com >>> <https://groups.google.com/d/msgid/django-users/352ed4ec-fcf8-4590-ae0b-9c97e29d80ef%40googlegroups.com?utm_medium=email&utm_source=footer> >>> . >>> For more options, visit https://groups.google.com/d/optout. >>> >> -- > You received this message because you are subscribed to the Google Groups > "Django users" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected]. > To post to this group, send email to [email protected]. > Visit this group at https://groups.google.com/group/django-users. > To view this discussion on the web visit > https://groups.google.com/d/msgid/django-users/220604e7-a433-4771-b52e-b9eede1b61e4%40googlegroups.com > <https://groups.google.com/d/msgid/django-users/220604e7-a433-4771-b52e-b9eede1b61e4%40googlegroups.com?utm_medium=email&utm_source=footer> > . > For more options, visit https://groups.google.com/d/optout. > -- You received this message because you are subscribed to the Google Groups "Django users" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. Visit this group at https://groups.google.com/group/django-users. To view this discussion on the web visit https://groups.google.com/d/msgid/django-users/CAF0v3b7JGW5ezjujizG1Z8e%2ByNP-Q56zQ4Uwror1RNXM9Hm1mg%40mail.gmail.com. For more options, visit https://groups.google.com/d/optout.

