Есть ли способ предварительно заполнить 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)
Я использую Class Based Views / 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. Спасибо