在Django中获取作者(用户)
我正在尝试使用ModelForms制作一个新闻发布应用程序,目前我正在尝试将其设置为表单自动获取经过身份验证的用户,这样当所述用户发布新闻项目时,其名称将出现,如“发布人:用户”。在models.py文件中,我尝试使用:在Django中获取作者(用户),django,django-models,django-forms,django-authentication,authentication,Django,Django Models,Django Forms,Django Authentication,Authentication,我正在尝试使用ModelForms制作一个新闻发布应用程序,目前我正在尝试将其设置为表单自动获取经过身份验证的用户,这样当所述用户发布新闻项目时,其名称将出现,如“发布人:用户”。在models.py文件中,我尝试使用:models.ForeignKey(User),但它不会自动设置用户,并且会在表单中显示一个下拉小部件。它工作不正常 如前所述,我将如何实现我的目标: 获取发布表单的经过身份验证的用户 把他的名字贴在有新闻的页面上 应要求张贴代码: Models.py: from django.
models.ForeignKey(User)
,但它不会自动设置用户,并且会在表单中显示一个下拉小部件。它工作不正常
如前所述,我将如何实现我的目标:
from django.db import models
from django.forms import ModelForm
from django.contrib.auth.models import User
# Create your models here.
class NewsItem(models.Model):
user = models.ForeignKey(User)
date = models.DateField()
news = models.TextField(max_length=100000)
def __unicode__(self):
return u'%s %s %s' % (self.user, self.date, self.news)
class NewsForm(ModelForm):
class Meta:
model = NewsItem
Views.py:
from news.models import NewsForm
from django.forms import forms
from django.shortcuts import render
from django.http import HttpResponseRedirect
def news_poster(request):
if request.method == 'POST':
form = NewsForm(request.POST)
if form.is_valid():
form.save()
return HttpResponseRedirect('/')
else:
form = NewsForm()
return render(request,'news_post.html', {'form': form})
模板:
{% extends "base.html" %}
{% block title %}News poster {% endblock %}
{% block content %}
<form action="/news/" method="POST">{% csrf_token %}
{{ form.as_p}}
<input type="submit" value="Submit" />
</form>
{% endblock %}
{%extends“base.html”%}
{%block title%}新闻海报{%endblock%}
{%block content%}
{%csrf_令牌%}
{{form.as_p}}
{%endblock%}
型号
将外键
添加到用户
:
class NewsItem(models.Model):
user = models.ForeignKey(User)
date = models.DateField()
news = models.TextField(max_length=100000)
形式
从NewPostForm
中排除user
字段,这样它就不会显示为select
class NewPostForm(forms.ModelForm):
class Meta:
model = NewsItem
exclude = ('user',)
意见
在保存NewPostForm
之前,请添加用户:
if form.is_valid():
news_item = form.save(commit = False)
news_item.user = request.user # User posting the form
news_item.save()
模型
将外键
添加到用户
:
class NewsItem(models.Model):
user = models.ForeignKey(User)
date = models.DateField()
news = models.TextField(max_length=100000)
形式
从NewPostForm
中排除user
字段,这样它就不会显示为select
class NewPostForm(forms.ModelForm):
class Meta:
model = NewsItem
exclude = ('user',)
意见
在保存NewPostForm
之前,请添加用户:
if form.is_valid():
news_item = form.save(commit = False)
news_item.user = request.user # User posting the form
news_item.save()
您可以使用
instance
传递用户
from news.models import NewsForm, NewsItem
from django.shortcuts import render
from django.http import HttpResponseRedirect
def news_poster(request):
if request.method == 'POST':
item = NewsItem(user=request.user)
form = NewsForm(request.POST, instance=item)
if form.is_valid():
form.save()
return HttpResponseRedirect('/')
else:
form = NewsForm()
return render(request,'news_post.html', {'form': form})
您可以使用
instance
传递用户
from news.models import NewsForm, NewsItem
from django.shortcuts import render
from django.http import HttpResponseRedirect
def news_poster(request):
if request.method == 'POST':
item = NewsItem(user=request.user)
form = NewsForm(request.POST, instance=item)
if form.is_valid():
form.save()
return HttpResponseRedirect('/')
else:
form = NewsForm()
return render(request,'news_post.html', {'form': form})
发布模型、表单、视图和模板中的相关代码发布模型、表单、视图和模板中的相关代码将尝试一下,给我几分钟时间integrate@JohnGarza让我知道这是怎么回事。我更新了代码以匹配您发布的代码。该字段将消失,但当我尝试提交时,会引发完整性错误。“news\u newsitem.user\u id不能为NULL”@JohnGarza您是否修改了视图,并使用了
form.save(commit=False)
?如果您这样做了:您的用户实际上是经过身份验证的,还是匿名的?根据我的模板输出,用户已登录。我使用django的打包视图注销并再次登录。我也使用了form.save(commit=false),我会尝试一下,给我几分钟时间integrate@JohnGarza让我知道这是怎么回事。我更新了代码以匹配您发布的代码。该字段将消失,但当我尝试提交时,会引发完整性错误。“news\u newsitem.user\u id不能为NULL”@JohnGarza您是否修改了视图,并使用了form.save(commit=False)
?如果您这样做了:您的用户实际上是经过身份验证的,还是匿名的?根据我的模板输出,用户已登录。我使用django的打包视图注销并再次登录。我也使用了form.save(commit=false)