django 3-如何将文章模型外键设置为登录用户id



我是django 3的新学习者。尝试构建一个博客应用程序,用户可以在其中创建文章&文章作者的外键将记录在用户id中。为此,我的模型.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

根据模型,我一张一张地做了一张表格。py

 from django import forms
 from django.forms import ModelForm
 from .models import *

class ArticleForm(forms.ModelForm):
class Meta:
    model = Article
    fields = '__all__'

为了呈现这种形式,我的视图功能是…

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>

通常我会用这种方式将数据存储到数据库中,但这种方式需要手动设置作者字段,但我想知道如何将此作者字段设置为登录用户id?我从谷歌搜索了很多网站;youtube,但没有找到我的答案。有人能帮我解决这个问题吗?如何将author字段设置为登录用户id?

首先,您必须设置Author和User之间的关系。您可以将其添加到Author模型中

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()

最新更新