如何检查django表单是否保存在db中

时间:2015-01-14 09:30:13

标签: django django-models

我在ModelForm Django

中制作了一个简单的1.7

models.py

from django.db import models
from django.forms import ModelForm

class Biodata(models.Model):
    first_name = models.CharField(max_length=30)
    last_name = models.CharField(max_length=30)
    room_number = models.IntegerField(default=0)

    def __str__(self):
        return self.first_name

class BiodataForm(ModelForm):
    class Meta:
        model = Biodata
        fields = '__all__'

views.py

def getdata(request):
    if request.method == 'POST':
        form = BiodataForm(request.POST)
        if form.is_valid():
            post = request.POST
            firstname = post['first_name']
            lastname = post['last_name']
            newbiodata = form.save()
            return render(request, 'bio/index.html', {'first_name': firstname, 'last_name': lastname})
    else:
        form = BiodataForm()
    return render(request, 'bio/biodataform.html', {'form': form})

所有事情都运转良好

问题:

如何使用这些表单查看我的数据库和信息?

2 个答案:

答案 0 :(得分:0)

你可以做两件事。

  1. 信任Django 。保存表单,然后将您获得的对象传递到模板中。如果对象存在,则应将其传递到模板中。像这样:

    def getdata(request):
        if request.method == 'POST':
            form = BiodataForm(request.POST)
            if form.is_valid():
                post = request.POST
                newbiodata = form.save()
                return render(request, 'bio/index.html',
                    { 'first_name': newbiodata.firstname,
                      'last_name': newbiodata.lastname    })
    
  2. 从数据库中明确询问对象。使用表单中对象的主键(pk)从数据库中显式调用它。这可能是矫枉过正的,并会强制进行额外的(可能是多余的)查询。优点是,如果它没有保存,这将抛出一个非常明显的ObjectDoesNotExist异常但如果你是偏执的排序,这将有效:

    def getdata(request):
        if request.method == 'POST':
            form = BiodataForm(request.POST)
            if form.is_valid():
                post = request.POST
                bio = form.save()
                newbiodata = models.Biodata.objects.get(pk=bio.pk) # get it back
                return render(request, 'bio/index.html',
                    { 'first_name': newbiodata.firstname,
                      'last_name': newbiodata.lastname    })
    

答案 1 :(得分:0)

您不应该在成功的帖子上呈现模板。相反,您应该重定向到新的URL。这为您提供了从数据库中获取新对象的绝佳机会。在表单视图中:

newbiodata = form.save()
return redirect('show_biodata', kwargs={'pk': newbiodata.pk})

现在您可以在show_biodata视图中再次获取它:

def show_biodata(request, pk):
    biodata = BioData.objects.get(pk=pk)
    return render(request, 'bio/index.html', {'first_name': biodata.firstname, 'last_name': biodata.lastname})