我正在尝试将当前登录用户设置为用于上传图像的表单帖子的作者。我正在遵循可以在 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})