Как у поста может быть автор на django? - PullRequest
0 голосов
/ 24 апреля 2020

Я пытался сделать так, чтобы в сообщении было имя пользователя создателя, но когда я запускаю код, всякий раз, когда я меняю профиль, меняется имя пользователя в сообщении. Кажется, что-то в файле models.py неверно.

Views.py

    def home(request):
        created_posts = Create.objects.all().order_by("-added_date")
        return render(request, 'base.html', {"created_posts": created_posts})

    def create(request):
        if request.method == 'POST':
        created_date = timezone.now()
        header1 = request.POST['header']
        content1 = request.POST['content']
        created_obj = Create.objects.create(added_date=created_date, title=header1, content=content1)
        created_obj.save()
        print('create created')
        return redirect('home')
    else:
        print('create not created')
        return render(request, 'create.html')

Models.py

    class Create(models.Model):
        added_date = models.DateTimeField()
        title = models.CharField(max_length=200)
        content = models.CharField(max_length=200)

create. html (создает сообщение)

    {% extends 'home.html' %}
    {% block body %}
    <div style="margin-top: 200px; margin-left:200px;">
        <form action="create" method="POST">
            {% csrf_token %}
            <input type="text" name="header" placeholder="Add here...">
            <input type="text" name="content" placeholder="Add here...">
            <button type="submit"name="action" class="btn btn-primary mb-2">submit</button>
        </form>
    </div>
    {% endblock %}

base . html (показывает созданные сообщения в списках)

   {% extends 'home.html' %}
   {% block body %}
   <ul action="{% url 'create' %}" class="container-sm list-group" style="margin-top: 200px;">
      {% for created_post in created_posts %}
      <li class="list-group-item">{{ created_post.title }}
          <p>{{ user.username }}</p>
          <p>{{ created_post.content }}</p>
          <div class="float-right">
            <form action="delete_create/{{ created_post.id }}/" action="post">
              <button type="submit" class="btn btn-outline-danger btn-sm">Delete</button>
            </form>
          </div>
          <div class="float-right">
            <a href="{% url 'edit' created_post.id %}" class="btn btn-outline-warning btn-sm" style="margin-right: 5px;" role="button">Edit</a>
          </div>
      </li>     
      {% endfor %}            
    </ul>
    {% endblock %}

1 Ответ

0 голосов
/ 24 апреля 2020

вам нужно добавить поле к вашей Create модели, которое равно created_by, и сохранить пользователя в этом поле в вашем def create() method. Прямо сейчас вы просто отображаете активного пользователя.

Таким образом, ваша модель Create должна быть:

   class Create(models.Model):
        added_date = models.DateTimeField()
        title = models.CharField(max_length=200)
        content = models.CharField(max_length=200)
        user = models.ForeignKey(User, related_name='user')

, и ваше представление должно установить поле user объекта Create:

def create(request):
    if request.method == 'POST':
    created_date = timezone.now()
    header1 = request.POST['header']
    content1 = request.POST['content']
    user = request.user //THIS IS WHAT YOU NEED, OR CLOSE TO IT NOT EXACTLY SURE
    created_obj = Create.objects.create(added_date=created_date, title=header1, content=content1, user = user)
    created_obj.save()
    print('create created')
    return redirect('home')
else:
    print('create not created')
    return render(request, 'create.html')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...