问题描述
我在 https之后使用
,但是如果我运行它是书籍项目,它将调用发布请求以两次创建书籍,但一次保存一次。 django-bootstrap-modal-forms 1.3.1
: //pypi.org/project/django-bootstrap-modal-forms /
I am using django-bootstrap-modal-forms 1.3.1
following https://pypi.org/project/django-bootstrap-modal-forms/
but if I run it's project of books it calls the post request to create book twice but saves the from once.
当我使用它时,它发出两次发布请求,但是两个请求都用一个空文件保存了一个,即,一个发布保存了模态的所有字段,如 title
说明
,日期
,而不是上传
(文件),下一篇文章同时通过上传
保存所有内容
As I am using it, it makes twice post request but both the request are saved one with empty file i.e one post saves all the fields of modal like title
description
, date
but not the upload
(file) and the next post saves all of it with upload
simultaneously
这是我的模型:
class File(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
author = models.ForeignKey(User, on_delete=models.CASCADE)
visible_to_home = models.ManyToManyField(Home, blank=True) # when none visible to all home
visible_to_company = models.ManyToManyField(Company, blank=True) # when none visible to all company
# To determine visibility, check if vtc is none or include company of user and if true, check same for home
created_date = models.DateTimeField(auto_now=True)
published = models.BooleanField(default=True)
upload = models.FileField(blank=True, null=True, upload_to=update_filename)
title = models.CharField(max_length=225, blank=True, null=True)
description = models.TextField(blank=True, null=True)
如果我删除作者,那么效果很好,但根据我的要求我需要作者。
If I remove author then it works fine but as my requirement I need author.
class FileForm(PopRequestMixin, CreateUpdateAjaxMixin, forms.ModelForm):
class Meta:
model = File
fields = ('title', 'description', 'upload')
查看
class FileCreateView(PassRequestMixin, SuccessMessageMixin,
CreateView):
template_name = 'file/upload-file.html'
form_class = FileForm
success_message = 'File was uploaded successfully'
success_url = reverse_lazy('home')
def post(self, *args, **kwargs):
"""
Handle POST requests: instantiate a form instance with the passed
POST variables and then check if it's valid.
"""
form = self.get_form()
# form = self.form_class(self.request.POST, self.request.FILES)
if self.request.method == 'POST':
if form.is_valid():
file = form.save(commit=False)
file.upload = form.cleaned_data['upload']
file.author = User.objects.get(pk=self.request.user.pk)
file.save()
return self.form_valid(form)
else:
return self.form_invalid(form)
home.html
home.html
{% block extrascripts %}
<script type="text/javascript">
$(function () {
$(".upload-file").modalForm({formURL: "{% url 'file-upload' %}"});
});
</script>
{% endblock extrascripts %}
其他与示例实现相同。
推荐答案
尝试一下:
if form.is_valid():
if not self.request.is_ajax():
file = form.save(commit=False)
file.upload = form.cleaned_data['upload']
file.author = User.objects.get(pk=self.request.user.pk)
file.save()
这篇关于Django模型表单保存同时发布请求两次的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!