【问题标题】:Django - Save forms in the same data tableDjango - 将表单保存在同一个数据表中
【发布时间】:2015-07-28 19:05:14
【问题描述】:

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

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

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

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)

我应该怎么做才能将每​​个参与者的所有选定答案保存在同一行中?

【问题讨论】:

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


【解决方案1】:

您正在使用两种不同的模型,这就是它们被分开的原因。您需要在它们之间建立关系,使用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

或者,您可以将这两个模型组合起来。

【讨论】:

  • 我试过这个。但我不知道应该在 admin.py 中放什么来显示它们。我不能像往常一样定义 list_display = ["location", "age", "marital_status", "education", "movie_1", "movie_2"]。
  • 您是否在应用的 admin.py 中尝试过 admin.site.register(Restaurant)
  • 是的,只需尝试上面的 admin.site.register 但不起作用。 list_display 在我的 admin.py 中
  • from django.contrib import admin from .forms import SurveyForm from .models import Survey, Movie4 class SurveyAdmin(admin.ModelAdmin): list_display = ["location", "age", "marital_status", "教育”、“movie_1”、“movie_2”、“movie_3”] form = SurveyForm admin.site.register(Survey, SurveyAdmin) admin.site.register(Movie4)
  • 我也尝试将这两个模型结合起来。但问题是,我不能单独显示它们。它们显示为 {{form}}。我尝试将它们显示为 {{survey.location}} 或 {{survey.movi​​e_1}} 但它不起作用。
猜你喜欢
  • 2015-12-02
  • 1970-01-01
  • 1970-01-01
  • 2016-08-09
  • 2016-10-15
  • 2021-04-26
  • 2018-03-16
  • 2017-03-06
  • 2016-01-06
相关资源
最近更新 更多