为什么我的“ if project_form.is_valid()和p_formset.is_valid()”不起作用?

艾莉·理查森(Elly Richardson)

因此,我一直在尝试在我的网站上实施一项功能,以便能够在其中发布多张图片。我不确定为什么同时对project_forms.is_valid()和p_formset.is_valid()都执行if语句,但我的代码无法正常工作。但是,如果只是其中之一,它们就可以正常工作。

我没有出现任何错误,只是它没有按预期执行。没有图像或帖子进入我的数据库。

我实现多图片上传的方式是为帖子和多图片上传创建单独的表格,但使用外键链接。

这是我的代码:

views.py

def create_projects(request):
    # Special case if the request method is not POST

    project_form = ProjectsForm(request.POST, request.FILES)
    p_formset = P_ImageForm(request.POST, request.FILES)

        # Checks if the form is valid before save
    if project_form.is_valid() and p_formset.is_valid():
        instance = project_form.save(commit=False)
        instance.user = request.user
        instance.save()
        p_photos = p_formset.save(commit=False)
        p_photos.save()

        data = {'is_valid': True, 'name': p_photos.p_file.name, 'url': p_photos.p_file.url}

        return JsonResponse(data)

    else:

        data = {'is_valid': False}

    context = { 
    'project_form': project_form,
    'p_formset': p_formset,
    }
    return render(request, 'projects/forms.html', context)

models.py

from django.db import models
from django.utils import timezone
from django.forms import ModelForm
from django.utils.text import slugify
from django.utils.crypto import get_random_string
from django.conf import settings
from django.contrib.postgres.fields import ArrayField
from django.contrib.auth.models import (
    BaseUserManager, AbstractBaseUser
)
from PIL import Image

import os

DEFAULT_IMAGE_ID = 1

# Create your models here.
class Projects(models.Model):
    title = models.CharField(max_length=30)
    description = models.TextField(max_length=150)
    publish_date = models.DateTimeField(auto_now=False, auto_now_add=True)
    update_date = models.DateTimeField(auto_now=True, auto_now_add=False)
    slug = models.SlugField(unique=True)
    files = models.FileField(upload_to='files/', blank=True)
    images = models.ImageField(upload_to='images/', height_field = 'img_height', width_field = 'img_width',blank=True)
    img_height = models.PositiveIntegerField(default=600)
    img_width = models.PositiveIntegerField(default=300)

    def __str__(self):
        return self.title

    def save(self, *args, **kwargs):
        # Generates a random string 
        unique_string = get_random_string(length=32)

        # Combines title and unique string to slugify
        slugtext = self.title + "-" + "unique_id=-" + unique_string
        self.slug = slugify(slugtext)

        return super(Projects, self).save(*args, **kwargs)

def get_p_image_filename(instance, filename):
    title = instance.p_post.title
    slug_title = slugify(title)
    return "post_images/%s-%s" % (slug_slug, filename)

class P_Images(models.Model):
    p_file = models.ImageField(upload_to='images/', blank=None)
    p_uploaded_at = models.DateTimeField(auto_now_add=True, auto_now=False)
    #p_post = models.ForeignKey(Projects, on_delete=models.CASCADE, default=DEFAULT_IMAGE_ID)

由于一个单独的问题,外键变量已被注释掉。我正在尝试通过解决此问题来修复它,以便可以将其保存到我的数据库中。

表格

from django import forms

from .models import Projects, P_Images

class ProjectsForm(forms.ModelForm):

    class Meta:
        model = Projects
        #file_field = forms.FileField(widget=forms.ClearableFileInput(attrs={'multiple': True}))
        fields = ('images','title', 'description',)


class P_ImageForm(forms.ModelForm):
    #p_image = forms.ImageField(label='Image')  
    class Meta:
        model = P_Images
        fields = ('p_file',)

basic-upload.js

$(function () {
    /* 1. OPEN THE FILE EXPLORER WINDOW */
    $(".js-upload-photos").click(function () {
      $("#fileupload").click();
    });

    /* 2. INITIALIZE THE FILE UPLOAD COMPONENT */
    $("#fileupload").fileupload({
      dataType: 'json',
      done: function (e, data) {  /* 3. PROCESS THE RESPONSE FROM THE SERVER */
        if (data.result.is_valid) {
          $("#gallery tbody").prepend(
            "<tr><td><a href='" + data.result.url + "'>" + data.result.name + "</a></td></tr>"
          )
        }
      }
    });

  });
混合

我认为您需要将函数分成两部分,第一个将呈现表单,第二个将回答api调用。我认为您应该这样做,因为函数应该返回一种类型的内容,而在这里您有两种:JSON和HTML。我建议你这样做:

@require_http_methods(["GET"])
def get_create_form(request):
    context = { 
        'project_form': ProjectsForm(),
        'p_formset': P_ImageForm(),
    }

    return render(request, 'projects/forms.html', context)

@require_http_methods(["POST"])
def create_projects(request):
    project_form = ProjectsForm(request.POST, request.FILES)
    p_formset = P_ImageForm(request.POST, request.FILES)

    # Checks if the form is valid before save
    if project_form.is_valid() and p_formset.is_valid():
        instance = project_form.save(commit=False)
        instance.user = request.user
        instance.save()
        p_photos = p_formset.save(commit=False)
        p_photos.save()

        data = {
            'is_valid': True, 
            'name': p_photos.p_file.name, 
            'url': p_photos.p_file.url
        }

    else:
        data = {
            'is_valid': False,
            'errors': form.errors.as_json()
        }

    return JsonResponse(data)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Django:is_valid和form_valid之间的区别

Python 和 BeautifulSoup:为什么我的 if 条件不起作用

Spring Boot-为什么@valid在类型控制器上不起作用?

Django序列化器:is_valid实际做什么?

为什么DjangoRF序列化器is_valid为false?

为什么我的CSS代码对我的HTML页眉和页脚不起作用?

为什么我的按钮对php和javascript不起作用,而我的其他按钮对呢?

为什么我的最大化和 DragMove 在我的 MouseDown 事件中不起作用?

为什么我重定向到我的前端不起作用(Express 和 React)

为什么“ NOT IN”和“ NOT EXISTS”不起作用?

为什么<p>和样式显示:阻止不起作用?

为什么 Python 中的 sin 和 cos 函数对我不起作用?

验证失败后,为什么我的redirectAttributes.addFlashAttribute和重新填充的数据不起作用?

为什么NSUserDefaults在我的应用程序和共享扩展之间不起作用?

为什么类型推导对我的交集和差动调用不起作用?

如果我使用变量,为什么这个jQuery动画和附加操作不起作用?

C ++为什么我在int和str.length()之间进行的比较不起作用?

为什么我的Javascript和JQuery脚本不起作用?

如果我离开和返回视图控制器,为什么 viewWillTransition(to size:...) 不起作用?

为什么我的删除/销毁方法和链接不起作用?

为什么在我的Ember.ComputedProperty中“或”有效,而“和”却不起作用?

为什么 Animation.cancel() 和 View.clearAnimation() 在我的情况下不起作用?

如果我尝试在 Matlab 中链接日期时间和纬度,为什么 linkaxis 不起作用?

为什么某些 Bootstrap 类和 CSS 属性在我的代码中不起作用?

想删除星号和前面的字符并跟随它,为什么我的代码不起作用

为什么 layout_weight 和 weightSum 对我不起作用?

JQuery、PHP 和 mySQL 帮助。我不明白为什么这不起作用

我不明白为什么cordova 链接和Javascript 编码不起作用

使用 first 和 last 属性时,为什么我的嵌套 IF 在 Smarty 中不起作用?