前提・実現したいこと
Djangoを使ってSNSのようなものを作っています。
機能としては
様々なユーザーが投稿を行う→自分以外のユーザーの投稿をランダムに表示し、返信
という機能を実装しようとしています。
トップページから返信ページへ移行する際に、自分以外のユーザーの投稿をランダムに表示するための処理をしようと思っています。
該当のソースコード
作成した処理としては、
mypost = Post.objects.exclude(sender=self.request.user).order_by("?").first() →自分以外のユーザーの投稿をランダムに1つ取得
self.myid = mypost.id →取得した投稿のIDを得る
context["page"] = self.myid →htmlファイルで {{page}}で値を受け取り、ランダムな投稿の返信ページへ遷移
なのですが、、、
Python
1#views.py 2 3class Top(generic.TemplateView): 4 template_name = 'register/top.html' 5 6 def __init__(self): 7 mypost = Post.objects.exclude(sender=self.request.user).order_by("?").first() 8 self.myid = mypost.id 9 10 def get_context_data(self, **kwargs): 11 context = super().get_context_data(**kwargs) 12 context["page"] = self.myid 13 return context 14 15class PostView(generic.CreateView): 16 model = Post 17 form_class = PostForm 18 success_url = reverse_lazy('register:top') 19 def form_valid(self, form): 20 form.instance.sender = self.request.user 21 return super().form_valid(form) 22
Python
1#forms.py 2 3classPostForm(forms.ModelForm): 4 5 class Meta: 6 model = Post 7 fields = ('text',) 8 widgets = {'text' : forms.Textarea(attrs={ 9 'rows': '10', 10 'cols': '80', 11 'maxlength': '200', 12 }), 13 } 14
Python
1#models.py 2class Post(models.Model): 3 sender = models.ForeignKey(User, on_delete=models.CASCADE) 4 text = models.TextField('Post', max_length=200) 5 send_date = models.DateTimeField('senddate', default=timezone.now)
発生している問題・エラーメッセージ
以下のようなAttributeErrorが発生しています。これを解決する方法をご教示いただけないでしょうか。
File "/Users/{ソースコードへのパス}/register/views.py", line 38, in __init__ mypost = Post.objects.exclude(sender=self.request.user).order_by("?").first() AttributeError: 'Top' object has no attribute 'request'
試したこと
views.pyの
def __init__(self)
の部分を以下のようにdef get_queryset(self)に変更してもエラーが出ています。
python
1#views.py 2def get_queryset(self): 3 mypost = Post.objects.exclude(sender=self.request.user).order_by("?").first() 4 self.myid = mypost.id 5 return mypost
エラー
File "/Users/{ソースコードへのパス}/register/views.py", line 52, in get_context_data context["page"] = self.myid AttributeError: 'Top' object has no attribute 'myid'
補足情報(バージョンなど)
python 3.6.8
django 3.2.5
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/08/05 00:43
2021/08/05 03:14