Django - 将表单保存在同一数据表中

时间:2015-07-28 19:05:14

标签: django django-models django-forms django-admin django-views

我在为每个参与者保存同一行数据表中的选定选项时遇到问题。

我有2个表格。第一种形式是针对某些数据和多项选择问题。第二种形式是另一个多项选择题。这也意味着我有2页,在提交第1页的答案后,它将重定向到第2页的问题2。

当我尝试成为参与者并选择答案时,所选的选项将保存在不同的数据表中。图片和代码显示在下面。

enter image description here

forms.py

from django import forms
from .models import Survey

class SurveyForm(forms.ModelForm):
    BAT='Batman'
    SUPER='Superman'
    IRON='Ironman'
    WHATMOVIE1 = [
    (BAT, 'Batman'),
    (SUPER, 'Superman'),
    (IRON, 'Ironman'),
    ]
    movie_1 = forms.ChoiceField(choices=WHATMOVIE1, widget=forms.RadioSelect())
    class Meta:
        model = Survey
        fields = ["location", "age", 
        "marital_status", "education", 'movie_1']

class SurForm(forms.ModelForm):
    APP='Apple'
    BAN='Banana'
    LEM='Lemon'
    WHATMOVIE2 = [
    (APP, 'Apple'),
    (BAN, 'Banana'),
    (LEM, 'Lemon'),
    ]
    movie_2 = forms.ChoiceField(choices=WHATMOVIE2, widget=forms.RadioSelect())
    class Meta:
        model = Survey
        fields = [ 'movie_2']

views.py

from django.shortcuts import render
from django.http import HttpResponseRedirect
from django.core.urlresolvers import reverse
from .forms import SurveyForm, SurForm

def homepage(request):
    if request.method == 'POST':
        title = "Questionnaire"
        form = SurveyForm(request.POST or None)
        if form.is_valid():
            instance = form.save(commit=False)
            instance.save()
            return HttpResponseRedirect(reverse('nextpage'))
    else:
        form = SurveyForm()
    return render(request, "homepage.html", {"form": form})

def nextpage(request):
    title = "Next page"
    form = SurForm(request.POST or None)
    if form.is_valid():
        instance = form.save(commit=False)
        instance.save()
    context = {
        "form": form,
    }
    return render(request, "nextpage.html", context)

admin.py

from django.contrib import admin
from .forms import SurveyForm, SurForm
from .models import Survey, Sur

    class SurAdmin(admin.ModelAdmin):
        form = SurForm

    class SurveyAdmin(admin.ModelAdmin):
        list_display = ["location", "age", 
        "marital_status", "education", 
        "movie_1"]
        form = SurveyForm


    admin.site.register(Survey, SurveyAdmin)
    admin.site.register(Sur, SurAdmin)

如何为每位参与者保存同一行中的所有选定答案?

1 个答案:

答案 0 :(得分:0)

您使用的是两种不同的型号,这就是它们分开的原因。您需要在它们之间创建关系,使用OneToOneField可以解决问题。像这样:

from django.db import models

class Place(models.Model):
    name = models.CharField(max_length=50)
    address = models.CharField(max_length=80)

    def __str__(self):              # __unicode__ on Python 2
        return "%s the place" % self.name

class Restaurant(models.Model):
    place = models.OneToOneField(Place, primary_key=True)
    serves_hot_dogs = models.BooleanField(default=False)
    serves_pizza = models.BooleanField(default=False)

    def __str__(self):              # __unicode__ on Python 2
        return "%s the restaurant" % self.place.name

您可以选择合并这两种模型。