没有显示作者是谁用Django写的帖子

2024-04-19 10:51:21 发布

您现在位置:Python中文网/ 问答频道 /正文

基本上,我正在编写一个应用程序,人们可以在其中发表博客和图片文章。到目前为止,我已经完成了让用户能够写文本帖子的任务。然而,当我试图创建一个帖子时,它会在应该返回“By:shrey”时返回“By:None”。在本例中,Bob是作者。这是一张图片: enter image description here

以下是创建后视图的图像: enter image description here

理论上,当我进入一个帖子时,它应该说是谁写的。 以下是创建帖子的模板:

{% extends "social/base.html" %}
{% load crispy_forms_tags %}
{% block content4 %}
  <h1>Make Your Post</h1>
  <p>Write a post / Share an image</p>
  <br>
  <div class="container">
    <form method="post">
      {% csrf_token %}
      {{form|crispy}}

      <button type="submit" name="button">Make Post</button>
    </form>
  </div>
{% endblock content4 %}

以下是创建后期视图的函数:

class PostCreateView(CreateView):
    model = Posts
    fields = ['post_title', 'post_text_content']

    def form_valid(self, form):
        form.instance.author = self.request.user
        print(self.request.user)
        return super().form_valid(form)

先谢谢你

编辑:主页模板(显示帖子的模板):

{% extends "social/base.html" %}
{% block content %}
  <h1>Your Feed</h1>
  <p>This is your feed. Here, you'll see posts from people you follow.</p>
  {% if user.is_authenticated %}
    <p>You are logged in as {{user.username}}. This is your feed.</p>
  {% else %}
    <p>You are not logged in. This is a random feed.</p>
  {% endif %}
  {% for post in posts %}
      <h1>{{ post.post_title }}</h1>
      <p>By {{ post.post_author }}  on <i>{{ post.post_date }}</i></p>
      <p>{{ post.post_text_content }}</p>
  {% endfor %}

      <a href="/create">Click here to make a post.</a>
      <br>
      <a href="/logout">Click here to logout.</a>
      <br>
      <a href="/login">Click here to login.</a>
      <br>
      <a href="/register">Click here to sign up and make an account.</a>
  <!--<p>Want to post something? Enter your info here: </p> -->
{% endblock content %}

职位模式:

class Posts(models.Model):
    post_title = models.CharField(max_length = 40, help_text = 'Enter post title')
    post_text_content = models.TextField(max_length = 1000)
    post_author = models.ForeignKey(User, on_delete=models.SET_NULL, null=True)
    post_date = models.DateField(auto_now = True, auto_now_add = False)
    #Make optional Image Field

    class Meta:
        ordering = ['post_title', 'post_author', 'post_date', 'post_text_content']

    def __str__(self):
        return self.post_title

    def get_absolute_url(self):
        return reverse('social-home')


Tags: totextbrselfformheretitlemodels
1条回答
网友
1楼 · 发布于 2024-04-19 10:51:21

字段的名称是post_author,而不是author,因此您应该设置post_author

class PostCreateView(CreateView):
    model = Posts
    fields = ['post_title', 'post_text_content']

    def form_valid(self, form):
        form.instance.post_author = self.request.user
        return super().form_valid(form)

这就是说,通常在Django中,而不是在模型字段前面加上模型名称。不这样做的一个原因是,您可以定义一次字段的抽象模型,然后使用继承将字段添加到其他模型中

相关问题 更多 >