django 3 - как установить внешний ключ модели статьи в качестве идентификатора пользователя? - PullRequest
0 голосов
/ 05 марта 2020

я новый ученик django 3. пытаясь создать приложение для блога, в котором пользователь может создать внешний ключ статьи и автора статьи, он будет зарегистрирован в идентификаторе пользователя. Для этого мой model.py имеет значение

from django.db import models

# Create your models here.


class Author(models.Model):
  name = models.CharField(max_length=50)
  bio = models.TextField()

def __str__(self):
    return self.name


class Category(models.Model):
  category = models.CharField( max_length=50)       
  description = models.TextField()

def __str__(self):
    return self.category

class Article(models.Model):
  title = models.CharField(max_length=50)
  image = models.ImageField(upload_to="images/")
  content = models.TextField()
  category = models.ForeignKey(Category, on_delete=models.CASCADE)
  author = models.ForeignKey(Author, on_delete=models.CASCADE)

def __str__(self):
    return self.title

в соответствии с моделью, которую я создал с помощью forms.py

 from django import forms
 from django.forms import ModelForm

 from .models import *


class ArticleForm(forms.ModelForm):

class Meta:
    model = Article
    fields = '__all__'

Чтобы представить эту форму, моя функция views: ...

from django.shortcuts import render, redirect
from .models import *
from .forms import *

# Create your views here.
def index(request):
  articles = Article.objects.all()
  form = ArticleForm()

  if request.method == 'POST':
    form = ArticleForm(request.POST)
    if form.is_valid():
        form.save()
    return redirect('bloglist')

context = {'articles':articles, 'form': form}
return render(request, 'bloglist.html', context)

и код шаблона ...

 <form method="POST" action="" class="form-inline">
     {% csrf_token %}
     {{form }}
     <input class="btn btn-primary mb-2" type="submit" name="Submit">
 </form>

Таким образом, обычно я сохраняю данные в базе данных, но при этом поле автора нужно устанавливать вручную, но я хочу знать, как установить это авторское поле как зарегистрированный идентификатор пользователя? Я искал много сайтов на Google и YouTube, но не нашел свой ответ. кто-нибудь, пожалуйста, помогите мне решить проблему? как установить поле автора как зарегистрированный идентификатор пользователя?

1 Ответ

0 голосов
/ 05 марта 2020

Во-первых, вы должны установить отношения между Автором и Пользователем. Вы можете сделать это, добавив это в свою модель Автор

class Author(models.Model):
    user = models.OneToOneField(User,related_name='author')
    #your other fields

Вы можете получить доступ к вашему зарегистрированному пользователю с помощью request.user. Для назначения автора вашей статьи:

if form.is_valid():
    article = form.save(commit=False) 
    article.author = request.user.author # you can check here whether user is related any author
    article.save()
...