1

我正在尝试将当前登录用户设置为用于上传图像的表单帖子的作者。我正在遵循可以在 StackOverflow 的几个公共问题中找到的建议,即:存储来自 form.save() 的对象,然后为它分配作者值。不幸的是,它似乎对我根本不起作用,而且我一直没有为该帖子分配作者。我已经检查了很多次我的代码,但我不知道出了什么问题。有人可以帮我吗?

我的模式.py

from django.db import models
from django.conf import settings
from django.contrib.auth.models import User
from django.views.decorators.csrf import csrf_exempt
from django.utils import timezone
from django.urls import reverse
from taggit.managers import TaggableManager



class Image(models.Model):
author = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, null="true", blank="true")

name = models.TextField(max_length='20')
image = models.ImageField(upload_to="images", verbose_name='Image', null="true")
secondImage = models.ImageField(upload_to="detail", verbose_name='multiple-image', null="true")

date_posted = models.DateTimeField(default=timezone.now)
tags = TaggableManager()


@property
def image_url(self):
  if self.image and hasattr(self.image, 'url'):
    return self.image.url

@property
def secondImage_url(self):
  if self.secondImage and hasattr(self.secondImage, 'url'):
    return self.secondImage.url

def get_image_filename(instance, filename):
    title = instance.post.title
    slug = slugify(title)
    return "post_images/%s-%s" % (slug, filename)

表格.py

    from django import forms
    from .models import Image


class ImageForm(forms.ModelForm):
    image = forms.ImageField(label='Image')
    class Meta:
        model = Image
        exclude = ('',)
        fields = "__all__"
    

视图.py

@login_required
def upload_Image(request):

if not request.user.is_authenticated():
    raise Http404

ImageFormSet = modelformset_factory(Image,
                                    form=ImageForm, extra=3)

if request.method == 'POST':
    form = ImageForm(request.POST, request.FILES)
    images = Image.objects.all()
    common_tags = Image.tags.most_common()[:4]
    if form.is_valid():
        form = Image(file_field=request.FILES['file'])
        newpost = form.save(commit=False)
        newpost.author = request.user
        newpost.slug = slugify(newpost.title)
        newpost.save()

        form.save_m2m()
        context = {
            'images':images,
            'multiple-image':multiple-image,
            'common_tags':common_tags,
            'categories':categories,
            'category':category,
            'form':form,
        }

        return HttpResponseRedirect('/images/')
    else:
        form = ImageForm()
    return render(request, 'photogallery/image_list.html', {'form': form})
4

1 回答 1

0

通过编写不再是form = Image(file_field=request.FILES['file']),而是一个对象。但是,无论如何,使用该方法并不是一个好主意。表格可以轻松完成所有工作。只需更改包装在表单中的实例:formImageFormImageform.save(commit=False)

@login_required
def upload_Image(request):
    if request.method == 'POST':
        form = ImageForm(request.POST, request.FILES)
        if form.is_valid():
            form.instance.author = request.user
            form.instance.slug = slugify(form.cleaned_data['title'])
            form.save()
            return HttpResponseRedirect('/images/')
    else:
        form = ImageForm()
    return render(request, 'photogallery/image_list.html', {'form': form})
于 2020-07-16T22:38:57.593 回答