【问题标题】:Unable to set current user as author of post in Django无法在 Django 中将当前用户设置为帖子的作者
【发布时间】:2020-07-16 22:35:15
【问题描述】:

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

form.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__"
    

views.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})

【问题讨论】:

  • 通过 uisng form = Image(file_field=request.FILES['file']),您覆盖了 form

标签: django django-views author logged


【解决方案1】:

通过编写form = Image(file_field=request.FILES['file'])form 不再是ImageForm,而是一个Image 对象。但是,无论如何,使用form.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})

【讨论】:

  • 感谢您的回答@Willem Van Onsem。我按照您建议的方式更改了视图,但我仍然不知道发布图片的作者。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-04-17
  • 1970-01-01
  • 1970-01-01
  • 2021-12-08
  • 1970-01-01
  • 2017-05-08
  • 1970-01-01
相关资源
最近更新 更多