Сохранение формы модели Django одновременно отправьте запрос дважды - PullRequest
0 голосов
/ 04 января 2019

enter image description here Я использую django-bootstrap-modal-forms 1.3.1 после https://pypi.org/project/django-bootstrap-modal-forms/, но если я запускаю проект книг, он вызывает почтовый запрос на создание книги дважды, но сохраняет один раз.

Поскольку я использую его, он дважды отправляет запрос, но оба запроса сохраняются, один с пустым файлом, т. Е. Одно сообщение сохраняет все поля модального типа, такие как title description, date, но не upload (файл) и следующий пост сохраняет все это с upload одновременно

Это моя модель:

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)

Если я удаляю автора, тогда он работает нормально, но в качестве моего требования мне нужен автор.

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

{% block extrascripts %}
<script type="text/javascript">
$(function () {
  $(".upload-file").modalForm({formURL: "{% url 'file-upload' %}"});
 });
</script>
{% endblock extrascripts %}

Другое аналогично примеру реализации.

1 Ответ

0 голосов
/ 04 января 2019

Вам необходимо изменить CreateView

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 form_valid(self, form):
       file = form.save(commit=False)
       file.author = self.request.user.pk
       file.save()
       return HttpResponseRedirect(reverse('home'))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...