django - 在 Django/Ajax 中使用 html 表单时将 request.user 作为隐藏输入传递
问题描述
有没有办法request.user
在. 我的目的是我想用.html
Django
photologue
User
Foreignkey
class GalleryExtended(models.Model):
# Link back to Photologue's Gallery model.
gallery = models.OneToOneField(Gallery, related_name='extended', on_delete=models.CASCADE,)
user = models.ForeignKey(settings.AUTH_USER_MODEL, related_name="galleries",default=1,on_delete=models.CASCADE)
我使用基于类的视图/Ajax 创建我的画廊
class AjaxableResponseMixin:
"""
Mixin to add AJAX support to a form.
Must be used with an object-based FormView (e.g. CreateView)
"""
def form_invalid(self, form):
response = super().form_invalid(form)
if self.request.is_ajax():
return JsonResponse(form.errors, status=400)
else:
return response
def form_valid(self, form):
# We make sure to call the parent's form_valid() method because
# it might do some processing (in the case of CreateView, it will
# call form.save() for example).
form.instance.slug = slugify(form.instance.title)
form.instance.user = self.request.user
print(form.instance.user)
response = super().form_valid(form)
if self.request.is_ajax():
data = {
'pk': self.object.pk,
'status': 'ok'
}
return JsonResponse(data)
else:
return response
class GalleryCreateView(AjaxableResponseMixin, CreateView):
model = GalleryExtended
form_class = GalleryExtendedModelForm
success_url = reverse_lazy('profiles:photos')
我试图初始化表单:
class GalleryExtendedModelForm(forms.ModelForm):
class Meta:
model=GalleryExtended
fields = ["user"]
def __init__(self, *args, **kwargs):
super(GalleryExtendedModelForm, self).__init__(*args, **kwargs)
self.fields['user'] = request.user
self.fields['user'].widget = HiddenInput()
在我的模板中:
<form class="form-group label-floating" id="album-create-form" method="post" enctype="multipart/form-data">
{% csrf_token %}
<label class="control-label">{% trans 'Enter Album Name' %}</label>
<input class="form-control" name="title" id="title" placeholder="" type="text" >
</form>
$('#album-create-form').submit( function(e){
e.preventDefault();
var serializedData = $(this).serialize();
$.ajax({
type: 'POST',
url: "{% url 'galleries:create' %}",
data: serializedData,
success: function (response) {
$("#album-create-form").modal('hide');
document.getElementById("album-create-form").reset();
$(document).ajaxStop(function(){
window.location.reload();
});
},
error: function (response) {
// alert the error if any error occured
alert(response["responseJSON"]["error"]);
}
});
});
是否有发送 request.user 的解决方案。谢谢
解决方案
您不必为 request.user 创建隐藏输入,我正在举个例子。
基于类的视图:CreateView
这会将请求用户添加到用户到数据库。
表格.py:
from django import forms
from .models import GalleryExtended
class GalleryExtendedModelForm(forms.ModelForm):
class Meta:
model = GalleryExtended
fields = ['gallery', ]
视图.py:
from django.views.generic import CreateView
class create_view(CreateView):
success_url = reverse_lazy('profiles:photos')
template_name = 'app_name/template_name.html'
form_class = GalleryExtendedModelForm
def form_valid(self, form):
form.instance.user = self.request.user
return super(create_view, self).form_valid(form)
模板.html:
<form method="post" id='album-create-form'>
{% csrf_token %}
{{ form }}
<input type="submit" value="Submit">
</form>
$('#album-create-form').submit( function(e){
e.preventDefault();
$.ajax({
type: 'POST',
url: "{% url 'galleries:create' %}",
data: {
'gallery': $('#id_gallery').val() // from form
},
success: function (response) {
$("#album-create-form").modal('hide');
document.getElementById("album-create-form").reset();
$(document).ajaxStop(function(){
window.location.reload();
});
},
error: function (response) {
// alert the error if any error occured
alert(response["responseJSON"]["error"]);
}
});
});
推荐阅读
- r - Knitr - 更改图表中段落之间的空格失败
- java - 将 Map.Entry 列表转换为 LinkedHashMap
- c - 循环结构时报告分段错误
- angular - 不显示用户头像
- javascript - 如果列表/数组不为空,如何禁用 Angular 中的按钮?
- c# - RavenDB - 为什么 IAsyncDocumentSession 中没有 DeleteAsync 方法
- swift - 如何在swift中隐藏文本字段并自动布局约束
- cuda - 'sudo dnf install cuda' 后'which' 没有找到 cuda
- r - 如何以毫秒为单位将纪元时间转换为人类可读的时间
- c++ - 无法在 Visual Studio 程序中运行合并排序