Django模型表单保存同时发布请求两次

Django模型表单保存同时发布请求两次

本文介绍了Django模型表单保存同时发布请求两次的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在 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模型表单保存同时发布请求两次的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-20 20:30