python - 尝试提交视图并收到 405 错误
问题描述
我正在尝试在用户配置文件中实施评论部分,但是当我尝试提交评论时,即使我在管理面板中创建评论,它通常会显示在配置文件上,但我仍然收到此 405 错误。如果你能帮忙的话。
提前致谢
代码:
模型
class Review(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
expert = models.ForeignKey(Expert, on_delete=models.CASCADE)
timestamp = models.DateTimeField(auto_now_add=True)
content = models.TextField()
形式
class ReviewForm(forms.ModelForm):
content = forms.CharField(widget=forms.Textarea(attrs={
'rows':3,
}))
class Meta:
model = Review
fields = ('content',)
看法
class ExpertDetailView(DetailView):
model = Expert
def expert(self, *args, **kwargs):
form = ReviewForm(self.request.POST)
if form.is_valid():
expert = self.get_object()
review = form.instance
review.user = self.request.user
review.expert = expert
review.save()
print ('worked')
print ('worked')
def get_object(self, **kwargs):
object = super().get_object(**kwargs)
return object
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context.update({
'form': ReviewForm()
})
return context
最后是模板
<h4>Leave a comment below</h4>
<form method='POST'>
{% csrf_token %}
{{ form|crispy}}
<br>
<button class='btn btn-primary' type='submit'>review</button>
</form>
<hr />
<h5>Comments</h5>
{% for review in object.reviews %}
<div>
<p>{{ review.content }}
<br />
<small>{{ review.timestamp|timesince }} ago</small>
</div>
<hr />
{% endfor %}
解决方案
405 表示该方法不被允许。这是有道理的,因为您没有写 a def post(request, *args, **kwargs)
,并且DetailView
默认情况下只写 a will
话虽如此,自己实现所有逻辑可能不是一个好主意。你可以让ModelFormMixin
已经让你完成大部分工作:
from django.contrib.auth.mixins import LoginRequiredMixin
from django.views.generic.edit import ModelFormMixin
class ExpertDetailView(LoginRequiredMixin, ModelFormMixin, DetailView):
model = Expert
form_class = ReviewForm
success_url = 'some-url'
def post(self, request, *args, **kwargs):
self.object = self.get_object()
form = self.get_form()
if form.is_valid():
return self.form_valid(form)
else:
return self.form_invalid(form)
def form_valid(self, form):
review = form.instance
review.user = self.request.user
review.expert = self.object
form.save()
return super().form_valid(form)
注意:您可以使用
LoginRequiredMixin
mixin [Django-doc]将视图限制为对经过身份验证的用户的基于类的视图 。
推荐阅读
- sabre - 如何为旅客添加特殊服务?
- tensorflow - keras 约束没有被调用
- angular - 添加ngrx是否总是证明自己(在角度项目中)
- azure - 连接到 Azure AD 条件访问 VPN 命令行
- connection-string - 如何使用 Sybase SQLAnywhere.SAConnection 进行远程连接?
- css - 仅当孩子有特定的类时才用于直接孩子的 CSS 选择器
- angular - 如何转换/创建有效的 JSON 以发送到 Web 服务?
- java - flat 的子项目包含在 gradle 中找不到的多项目
- dart - Flutter 从货币格式获取数字值
- c++ - C++ - 使用 std::difftime 编写调度程序 - 如何检查白天的时间 (HH:MM:SS) 发生?