使用用户填写的数据显示modelform

时间:2014-05-06 18:14:37

标签: django django-forms

我试图制作一个简单的投票应用程序。

首先应向用户显示一个空白表格,但是当用户填写表格时,应向用户显示相同的表格,但会填写他们填写的数据。

如何在同一表格上展示他们放入的数据?

我的模特:

class Vote(models.Model):
    user = models.ForeignKey(User)
    vote_1 = models.ForeignKey(Song, null=True, blank=True, related_name="voted_1")
    vote_2 = models.ForeignKey(Song, null=True, blank=True, related_name="voted_2")
    vote_3 = models.ForeignKey(Song, null=True, blank=True, related_name="voted_3")
    creation_date = models.DateTimeField(auto_now_add=True)
    edited = models.DateTimeField(auto_now=True)

我的观点:

def show_voteform(request):

    if request.method == 'POST':

        form = VoteForm(request.POST)

        if form.is_valid():

            form.save()

            messages.success(request, "Vote saved", extra_tags='alert-success')

            #Return the user to same page
            return HttpResponseRedirect('/vote/')

    else:
        form = VoteForm(initial={'user':request.user, 'vote_1':???, 'vote_2':???, 'vote_3':???,})

    return render(request, 'vote/form.html', {
        'form': form,
    })

这是我可以在initial中提供的内容,还是我必须以另一种方式执行此操作?

编辑:

将其更改为:

else:
    try:
        vote = Vote.objects.filter(user=request.user).latest('creation_date')
        form = VoteForm(instance=vote)
    except Vote.DoesNotExist:        
        form = VoteForm(initial={'user':request.user})

1 个答案:

答案 0 :(得分:2)

如果您的VoteFormModelForm,那么您可以使用以下内容填写模型实例中的数据来显示表单:

# get the most recent Vote by this user
vote = Vote.objects.filter(user=request.user).latest('creation_date')
# fill in the form with data from the instance
form = VoteForm(instance=vote)