在Django中获取作者(用户)

在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.

我正在尝试使用ModelForms制作一个新闻发布应用程序,目前我正在尝试将其设置为表单自动获取经过身份验证的用户,这样当所述用户发布新闻项目时,其名称将出现,如“发布人:用户”。在models.py文件中,我尝试使用:
models.ForeignKey(User)
,但它不会自动设置用户,并且会在表单中显示一个下拉小部件。它工作不正常

如前所述,我将如何实现我的目标:

  • 获取发布表单的经过身份验证的用户
  • 把他的名字贴在有新闻的页面上
  • 应要求张贴代码:

    Models.py:

    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)