【问题标题】:Django 2.1.5: Storing the current username in a blog entryDjango 2.1.5:将当前用户名存储在博客条目中
【发布时间】:2020-08-01 00:02:09
【问题描述】:

我对 Django 很陌生,我尝试为我的家人构建一个具有一些基本功能的小应用程序,其中一个是博客应用程序。现在我想将博客条目的作者存储在文章模型中以将其保存在数据库中。最后在博客条目中,我想要一个显示作者和日期时间的标题。

我找到了几种方法来解决这个问题,但有些方法到目前为止都不适合我。我现在做的最后一件事是尝试使用 requests.user.get_username() 在视图中获取用户名,然后使用此字符串作为初始值填充表单中的字段。不知何故,它只是没有通过,我总是收到“字段是必需的”错误消息......

这是我的 blog-create-view.py:

def blog_create_view(request):
    user = request.user.get_username()
    data = {'author': user}
    form = BlogForm(request.POST, data)
    if form.is_valid():
        form.save()
        return HttpResponseRedirect('/blog/blog-create/thanks')
    else:
        print(form.errors)
        form = BlogForm()

    context = {
        'articleform' : form,
    }
    return render(request, "blog-create.html", context)

这是表格:

class BlogForm(forms.ModelForm):
    title   = forms.CharField(label='',
                    widget=forms.TextInput(attrs={"placeholder":"Titelfeld"}))
    text    = forms.CharField(
                        label='',
                        widget=forms.Textarea(
                        )
                    )
    author  = forms.CharField(widget=forms.HiddenInput())

    class Meta:
        model = Article
        fields = [
            'title',
            'text',
        ]

这是模型:

class Article(models.Model):
    title       = models.CharField(blank=False,max_length=1000)
    text        = models.CharField(blank=False, default='Text', max_length=10000)
    datetime    = models.DateTimeField(auto_now=True)
    featured    = models.BooleanField(default='False')
    author      = models.CharField(max_length=1000)

非常感谢您的帮助!想弄清楚这一点我真的很沮丧

【问题讨论】:

    标签: python django forms model


    【解决方案1】:

    如果您想将作者姓名添加为当前登录用户的用户名,您可以按如下方式进行。并删除表单中的作者

    if form.is_valid():
            instance = form.save(commit=False)
            instance.author = request.user.username
            instance.save()
    

    话虽如此,还是把作者改成foreignkeyfrom django.contrib.auth.models import User分配给request.user而不是username比较好,这样就可以通过Article.objects.filter(author=request.user)过滤文章了

    p>

    【讨论】:

    • 天哪,非常感谢。这比我找到的许多解决方案要容易得多,而且超级直观!像魅力一样工作!我仍然想知道为什么我的初始数据没有通过...
    • 我之前确实尝试过 ForeignKey 解决方案,但是当我在我的模型中分配时 author = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete = models.CASCADE) 并在我的视图中使用 instance.author = request。用户,然后在我的模板中,我尝试将名称设为 {{ instance.author.username }} 并获取 ValueError “invalid literal for int() with base 10: 'testuser'”。所以它确实得到了正确的用户名,但不知何故它的格式错误?!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-08-15
    • 1970-01-01
    • 1970-01-01
    • 2012-11-30
    • 2010-11-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多