【问题标题】:image not saving on django models图像不保存在 django 模型上
【发布时间】:2017-07-21 05:43:05
【问题描述】:

我用照片作为外键创建了一个相册,但不知何故,当我添加照片时,它可能不会保存在我的数据库或管理站点中

这是我的模型:

class AlbumPluginModel(CMSPlugin):
     name            = models.CharField(max_length=255,
                                   help_text=_('e.g: Zuerich city, or Zuerich Hoengg'))
     slug            = models.SlugField(_('Slug'), blank=True, null=True, unique=True, db_index=True)
     description     = HTMLField(blank=True, null=True)    
     cover_photo     = models.ImageField(verbose_name=_('Add cover photo'), null=True, blank=True)
     is_active       = models.BooleanField(_('active'), blank=True)
     date_created    = models.DateTimeField(auto_now_add=True)
     date_modified   = models.DateTimeField(auto_now=True)
     sort            = models.IntegerField(_("Sort Order"), null=True, blank=True, default=0)

     def __str__(self):
         if self.name:
            return u"File for %s" % self.name
         else:
            return u"%s" % self.name

      def get_absolute_url(self):
            return "/album_detail%i/" % self.id

     class Meta:
         ordering = ['sort']
         verbose_name = "Album"
         verbose_name_plural = "Albums"


class Photo(models.Model):
     photo = models.ForeignKey(AlbumPluginModel, verbose_name=_('choose album'), null=True, blank=True)
     image1 = models.ImageField(verbose_name=_('Photo'), null=True, blank=True, upload_to="/static/img/")                              
     sort = models.IntegerField(_("Sort Order"), null=True, blank=True, default=0)


    def __unicode__(self):
        return u"%s" % self.image1

    def __str__(self):
       return u"%s" % self.image1

    class Meta:
         ordering = ['sort']
         verbose_name = _("photo")
         verbose_name_plural = _("Photos")

forms.py

class AlbumPluginForm(forms.ModelForm):
    class Meta:
        model = AlbumPluginModel
        fields = ['name', 'description', 'cover_photo', 'is_active',]


    class PhotoPluginForm(forms.ModelForm):
        photo = forms.ModelChoiceField(label='select album',aqueryset=AlbumPluginModel.objects.all(), required=False)

        class Meta:
            model = Photo
            fields = ('photo', 'image1', )

views.py

 def add_photo(request, id=None, **kwargs):

    if request.method == 'POST':

         all_photos = Photo.objects.all
         form = PhotoPluginForm(request.POST, request.FILES, initial={'photo': id})
         template_name = 'photo_create.html'

         context = {
            "form": form,
            "all_photos": all_photos,
    }

         if form.is_valid():

            all_photos = form.save(commit=False),
            form.save()

            messages.success(request, "Photo was added.")
            return redirect('/photos')
        else:
            print("error: form nicht valid")

     return render(request, template_name, context)

【问题讨论】:

  • 您是否在模板中将enctype="multipart/form-data" 添加到您的<form> 中?
  • 您应该将它保存在媒体文件夹中。不在静态文件夹中。 /static/img/ 应该是 /media/img/
  • @MounaDhaouadi 只是没有保存
  • @MHassan 也做了,但仍然没有保存
  • 您在保存AlbumPluginModelcover_photoPhotoimage1 时遇到问题吗?

标签: python django forms image django-cms


【解决方案1】:

您应该为要在服务器中上传某些文件的字段添加upload_to 参数。在你的情况下,AlbumPluginModel 你的cover_photo 将是

cover_photo = models.ImageField(verbose_name=_('Add cover photo'), null=True, blank=True, upload_to='path_where_you_want_to_save')

如果你用commit=False 调用save(),那么它将返回一个尚未保存到数据库的对象。在这种情况下,您可以在生成的模型实例上调用 save()。你应该像这样改变你的看法

all_photos = form.save(commit=False),
all_photos.save()

【讨论】:

  • @M Hassan 'tuple' 对象没有属性 'save'
【解决方案2】:

经过长时间的尝试,我终于找到了答案:

在views.py中 我从

更改了这条线
form = PhotoPluginForm(request.POST or None)

到:

form = PhotoPluginForm(request.POST, request.FILES)

在我的模板中我忘记了这个:

 enctype="multipart/form-data"

【讨论】:

    猜你喜欢
    • 2013-04-13
    • 2014-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-09
    • 2014-02-26
    • 2017-10-18
    • 1970-01-01
    相关资源
    最近更新 更多