سلام استاد روزتون بخیر
سوالی داشتم:
ما در صفحات جزییات مقاله و در قسمتی که نظرات را وارد میکنیم،باید حتما به ادمین برویم و نظرات را آنجا وارد کنیم تا در صفحه جزییات مقاله نمایش داده شود و همین طور در قسمت متن پیامی که با ajax نوشتین اگر نخواهیم از دستور ajax استفاده کنیم و یک فرم معمولی استفاده کنیم،مجددا باید وارد ادمین شویم و از آنجا متن پیام را بنویسیم،حالا مشکل این جاست که در سایت واقعی کاربر در همان جایی که نظر را مینویسد ودکمه ارسال را میزند میتواند متن نظر خود را ببیند ولی در این آموزش حتما باید وارد ادمین شود و متن را بنویسد و ذخیره کند و سپس به صفحه جزییات مقاله برود و نظرش را ببیند(مستقیم نمی تواند این کار را انجام دهد).البته بنده مبنایم بر این اصل است که از دستور ajax استفاده نشود چون شما در آموزش گفتین که ممکن است از نظر امنیتی سایت به مشکل بر خورد(مثل نوشن ربات ها و ...)چود دستور csrf را با نوشتن ajax نداریم.
لطفا راهنمایی کنید که باید چه کار کنیم که برای هر کاری وارد ادمین نشویم(به هر حال همه کاربران superuser نیستند)
سلام دوست من
نیازی نیست حتما از ادمین وارد بشه دوست من. فکر میکنم دچار اشتباه شدین
ما در دوره از ajax استفاده کردیم اما شما میتونین یک فرم عادی رو به صفحه ارسال کنین و از تگ form دقیقا مثل کاری که در صفحه ی تماس با ما انجام دادیم ، استفاده کنین
در مورد ajax باید بگم خود web server تا حد زیادی این مورد رو برای تعدد درخواست ها مدیریت میکنه و نیازی به نگرانی نیست ، صرفا برای ذکر مطلب این مورد رو خدمتتون عرض کردم
در کل یک فرم عادی ایجاد کنین برای درج نظر و از فرم استفاده کنین. نیازی به ورود به پنل ادمین نیست
ممنونم استاد
یعنی اگر من یک فرم درست کنم و کاربر نظرش را بنویسد و ارسال کند در همان صفحه قابل دیدن است؟؟؟
استاد ببخشید من الان یک فرم معمولی ساختم ولی چون در صفحه views ما از DetailView ها استفاده کردیم،فرم را به چه صورت باید آنجا تعریف کنم؟
استاد من الان یک مدل فرم ساختم ولی در صفحه views در get_context_data نمیدونم چطوری باید request.post را به آن اضافه کنم(اصلا request را نمیشناسه)،خواهش بگید باید چه کار کنم چون نمیخوام از دستور ajax استفاده کنم

ممنونم از شما
سلام باید selfبزاری self.request
بله دوست من میشه این کار رو انجام داد
همونطور که دوستمون گفتن باید از self.request استفاده کنین
سلام مجدد به استاد
استاد من از طریق self.request.post در صفحه views مربوط به articledetailview کد های زیر را برای درست کردن فرم به شرح زیر نوشتم:
class ArticleDetailView(DetailView):
template_name = 'article_module/article_detail_page.html'
model = Article
def get_queryset(self):
query = super(ArticleDetailView, self).get_queryset()
query = query.filter(is_active=True)
return query
def get_context_data(self, **kwargs):
context = super(ArticleDetailView, self).get_context_data()
form = ArticleTextForm(self.request.POST)
if form.is_valid():
text = form.cleaned_data.get('text')
txt = ArticleComment(text=text)
txt.save()
context['form'] = form
article: Article = kwargs.get('object')
context['comments'] = ArticleComment.objects.filter(article_id=article.id, parent=None).prefetch_related(
'articlecomment_set')
return contextو کدهای صفحه form نیز به شرح زیر است:
from django import forms
from .models import ArticleComment
class ArticleTextForm(forms.Form):
text = forms.CharField(
label='متن نظر',
widget=forms.Textarea(attrs={'class': 'form-control'})
)و کدهای html نیز به شرح زیر است:
</div><!--/Response-area-->
<div class="replay-box">
<div class="row">
<div class="col-sm-10">
<div class="text-area">
<form>
{% csrf_token %}
{{ form.text.lable }}
{{ form.text }}
{{ form.text.error }}
<button type="submit" class="btn btn-primary">ارسال نظر</button>
</form>
{% comment %} <textarea name="message" rows="11"></textarea>
<a class="btn btn-primary" href="">ارسـال نظـر</a>{% endcomment %}
</div>
</div>
{% comment %}<div class="col-sm-4">{% endcomment %}
<h4>نظـر خود را بنویسیـد</h4>
{% comment %}</div>{% endcomment %}
</div>
</div><!--/Repaly Box-->
</div>ولی باز هم نظرات را در صفحه جزییات مقاله هنگامی که روی ارسال نظر کلیک میکنم نشان نمیدهد و در run پایچارم این پیغام می آید:
[25/Sep/2022 09:21:55] "GET /articles/3?csrfmiddlewaretoken=g7Z2nuJWG6p7zc4swC6JY4WfN7kebBqUQjbs6uw74WamPpoW8twX1gO8H0SKNdFE&text=dddddddddddddddddddddddddddddddddddddddddddddddddd HTTP/1.1" 200 24701
E:\project_3\Eshop_project_3\article_module\views.py changed, reloading.
عکس صفحات به شرح زیر است:




استاد واقعا کلافه شدم.لطفا کمکم کنید
به جای detail view از view خالی استفاده کنین دوست من تا دستورات get و post رو بتونین راحت تر جداگانه بررسی کنین
در این حالت مقداری دشوار هستش
در نظر داشته باشین method مربوط به فرم حتما post باشه