【问题标题】:Disallow All Site Users From appearing In Post Form During Post Creation在帖子创建期间禁止所有站点用户出现在帖子表单中
【发布时间】:2021-02-11 12:50:52
【问题描述】:

发布的基本原理是允许我网站上的所有客户都可以选择发布帖子和新闻,这是成功的,但令人震惊的是,在发布帖子时,数据集中所有经过身份验证的客户/用户都显示为特定确认客户端浏览,这是我在发帖时不需要客户端/用户看到的数据,我没有安排从帖子模型中消除用户外键,因为它鼓励我实现其他站点基本功能和作者功能。因为用户/客户端将填写为创建者/作者

class Post(models.Model):
    image = models.ImageField(upload_to="images/")
    title = models.CharField(max_length=150)
    summary = models.CharField(max_length=250)
    category = models.ForeignKey(PostCategory, on_delete=models.CASCADE)
    content = RichTextUploadingField()
    date_posted = models.DateTimeField(default=timezone.now)
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    slug = models.SlugField(max_length=250, unique=True, blank = True)


   def onlyselfuser(self, *args, **kwargs):
      self.user = self.request.user
      super().onlyselfuser(*args, **kwargs)

#请看一下我的 view.py 文件

class PostCreateView(LoginRequiredMixin, CreateView):
    model = Post
    fields = __all__
    def form_valid(self, form):
    form.instance.author = self.request.user
    return super().form_valid(form)

如果有人能告诉我一个退出方式,我将不胜感激,登录用户(user=request.user)只会出现,不包括模式上的其他用户,我仍然尝试了 OneToOneField,但它没有工作。我不想看到用户中的所有站点用户,但特定用户i

【问题讨论】:

    标签: python django django-models django-views django-forms


    【解决方案1】:

    您可以设置要显示的字段:

    class PostCreateView(LoginRequiredMixin, CreateView):
        model = Post
        fields = ['image', 'title', ....] # Don't add user fields name here
        
        def form_valid(self, form):
            form.instance.user = self.request.user # You wrote instance.author but your model had it as user
            return super().form_valid(form)
    

    但这很乏味。更好的方法是使用 ModelForm 并添加要排除的用户字段。另外,这允许您进行更多的自定义!:

    from django.forms import ModelForm
    
    class PostForm(ModelForm):
        class Meta:
            model = Post
            exclude = ['user']
    
    class PostCreateView(LoginRequiredMixin, CreateView):
        form_class = PostForm
        
        def form_valid(self, form):
            form.instance.user = self.request.user
            return super().form_valid(form)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-12
      • 1970-01-01
      • 2023-04-05
      • 2018-04-10
      相关资源
      最近更新 更多