编辑2:对于一个形式。我想我已经做了有)保存的压倒一切的(方法,像这样(forms.py)个性化的形式:
class YourForm(forms.Form):
fname = forms.CharField(label="name",max_length=70,validators=[#Choose your validators here])
fundergrad = forms.CharField(label="fundergrad",max_length=100,validators=[#Choose your validators here])
fundergrad_major = forms.CharField(label="fundergrad_major",max_length=80,validators=[#Choose your validators here])
fgrad = forms.CharField(label="fgrad",max_length=100,validators=[#Choose your validators here])
fgrad_major = forms.CharField(label="fgrad_major",max_length=80,validators=[#Choose your validators here])
def save(self, datas):
res = Resumes()
res.name = datas['fname']
undergrad = Universities()
undergrad_major = Majors()
grad = Universities()
grad_major = Majors()
undergrad.name = datas['fundergrad']
undegrad_major.name = datas['fundergrad_major']
grad.name = datas['fgrad']
grad_major.name = datas['fgrad_major']
undergrad.save()
undergrad_major.save()
grad.save()
grad_major.save()
res.undergrad = undergrad
res.undergrad_major = undergrad_major
res.grad = grad
res.grad_major = grad_major
res.save()
return res
在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:(没有按“T回答的问题,但它可以帮助别人,也许只好让在这里)
我会在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)
解释:https://docs.djangoproject.com/en/dev/ref/contrib/admin/#working-with-a-model-with-two-or-more-foreign-keys-to-the-same-parent-model
啊我担心自定义保存自定义窗体将是唯一的解决方案(我开始在发布我的问题之前走相同的路线)。 ModelForms +内联表单的描述看起来完全适合,但我想这不适用于我的模型。我会在一两天内抛出问题,并希望在接受之前不是这样。我也会测试代码,并让它知道它是否有效。谢谢。 –
实际上,自定义表单总是允许您更多的自由:显示样式,字段类型,字段小部件,验证器和自定义验证器,复杂验证(例如,如果您想检查它们之间的字段)。您可以使用自定义表单轻松完成所有操作,简单的Django表单不允许进行过多的自定义操作。 –
当用户输入数据未正确验证时,此模式无法解决模型未能保存 – Jay