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