我可以将这个Django表单作为作者吗?

时间:2014-02-26 22:29:45

标签: python django

我在这里对Django很新,我需要帮助获取此“表单”以获取当前登录用户的用户ID。

这是我的forms.py:

from django import forms
from models import Entry


class EntryForm(forms.ModelForm):

    class Meta:
        model = Entry
        fields = ('title', 'body', 'thumbnail')

我找不到有关此类表单实现的任何文档,特别是“fields”变量的工作方式。

我可以通过添加这样的作者来实现这一点:

  fields = ('title', 'body', 'thumbnail', 'author')

这几乎是我所需要的,除了这只会添加每个注册用户的下拉列表。

如何在Django中做这样的事情?

from django import forms
from models import Entry
from django.contrib.auth.models import User

class EntryForm(forms.ModelForm):

    class Meta:
        model = Entry
        fields = ('title', 'body', 'thumbnail')
            fields.author = request.user.username # <-- SEEMS TO NOT DO ANYTHING

或者不是那样,我怎么能把它编码到views.py?

def create(request):
    if request.POST:
        form = EntryForm(request.POST, request.FILES)
        if form.is_valid():
            form.author = request.user.id # <-- SEEMS TO NOT DO ANYTHING
            form.save()

            return HttpResponseRedirect('/weblog')

    else:
        form = EntryForm()

    args = {}
    args.update(csrf(request))

    args['form'] = form 

    return render_to_response('coltrane/newpost.html', args)

2 个答案:

答案 0 :(得分:2)

您需要在实例上设置作者,这是form.save()的结果,而不是在表单上。

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

请注意,您的第一次尝试会产生NameError异常(因为在该范围内未定义request)。

答案 1 :(得分:-1)

您可以在视图中使用request.user而不是request.user.username或request.user.id

        form.author = request.user