Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
具有多个外键的Django内联表单_Django_Django Forms - Fatal编程技术网

具有多个外键的Django内联表单

具有多个外键的Django内联表单,django,django-forms,Django,Django Forms,我试图在模板中使用Django的ModelForm和内联表单。但是,我找不到任何文档可以将多个外键精确映射到同一个表的数据库模型。这些是我的模型: # models.py class Universities(models.Model): name = models.CharField(max_length=100) class Majors(models.Model): name = models.CharField(max_length=80) class Resume

我试图在模板中使用Django的ModelForm和内联表单。但是,我找不到任何文档可以将多个外键精确映射到同一个表的数据库模型。这些是我的模型:

# models.py

class Universities(models.Model):
    name = models.CharField(max_length=100)

class Majors(models.Model):
    name = models.CharField(max_length=80)

class Resumes(models.Model):
    name = models.CharField(max_length=70)
    undergrad = models.ForeignKey(Universities, related_name='undergrad_university')
    undergrad_major = models.ForeignKey(Majors, related_name='undergrad_major')
    grad = models.ForeignKey(Universities, related_name='grad_university')
    grad_major = models.ForeignKey(Majors, related_name='grad_major')

我怎样才能让Django生成一个表单来提交简历,用户可以输入他们的大学名称和专业?在保存新简历之前,这四种方法都将用于在各自的数据库中创建新条目(2个在大学中,2个在专业中),类似于单键外键的工作方式。

EDIT2:用于制作表单。我想我应该做一个覆盖save()方法的个性化表单,比如(forms.py):

在views.py中:

def formView(request) :
  if request.method == 'POST':
      form = YourForm(request.POST)
      if form.is_valid():
          datas={}
          datas['fundergrad']=form.cleaned_data['fundergrad']
          datas['fundergrad_major']=form.cleaned_data['fundergrad_major']
          datas['fgrad']=form.cleaned_data['fgrad']
          datas['fgrad_major']=form.cleaned_data['fgrad_major']

          form.save(datas)

  #Then do what you have to do in your view
  
EDIT1:(没有回答这个问题,但它可能会帮助别人,所以我把它放在这里)

我会尝试在admin.py中使用类似的内容:

class UniversitiesInline1(admin.StackedInline):
  model = Universities
  fk_name = "undergrad"

class UniversitiesInline2(admin.StackedInline):
  model = Universities
  fk_name = "grad"

class MajorsInline1(admin.StackedInline):
  model = Majors
  fk_name = "undergrad_major"

class MajorsInline2(admin.StackedInline):
  model = Majors
  fk_name = "grad_major"

class ResumesAdmin(admin.ModelAdmin)
  inlines = [
    UniversitiesInline1,
    UniversitiesInline2,
    MajorsInline1,
    MajorsInline2,
  ]

admin.site.register(Resumes, ResumesAdmin)

解释:

Ah我担心带有自定义保存的自定义表单将是唯一的解决方案(在发布问题之前,我开始走同样的路线)。ModelForms+内联表单的描述似乎非常适合,但我想这在我的模型中是不可能的。我将把这个问题留待一两天,希望在接受之前情况并非如此。我还将测试代码,并让您知道它是否有效。谢谢。事实上,自定义表单总是允许您在以下方面有更多的自由:显示样式、字段类型、字段小部件、验证器和自定义验证器、复杂验证(例如,如果您想检查它们之间的字段)。您可以在自定义表单中轻松完成这一切,一个简单的Django表单不允许进行太多的自定义。当用户输入数据未正确验证时,模型无法保存时,这并不能解决问题
class UniversitiesInline1(admin.StackedInline):
  model = Universities
  fk_name = "undergrad"

class UniversitiesInline2(admin.StackedInline):
  model = Universities
  fk_name = "grad"

class MajorsInline1(admin.StackedInline):
  model = Majors
  fk_name = "undergrad_major"

class MajorsInline2(admin.StackedInline):
  model = Majors
  fk_name = "grad_major"

class ResumesAdmin(admin.ModelAdmin)
  inlines = [
    UniversitiesInline1,
    UniversitiesInline2,
    MajorsInline1,
    MajorsInline2,
  ]

admin.site.register(Resumes, ResumesAdmin)