【发布时间】:2020-07-20 15:56:04
【问题描述】:
所以基本上我的模板在一种形式中包含三列,它们分别工作。 如果我为联系人列和男性列提供输入,它将保存在我的数据库中。 但问题是外键不起作用。每当我在我的字段(forms.py)中包含外键变量时。表单不会在数据库中提交我的输入,但是当我从字段中删除它时 虽然它有效,但不会显示与联系人相关的任何值。 当外键变量的默认值为 True 时也可以使用。
结论外键与男性或女性模型无关。
请帮忙:
这是我的模型:
class Contact(models.Model):
name = models.CharField(max_length=30)
address = models.CharField(max_length=50)
age = models.IntegerField()
number = models.IntegerField()
type = models.CharField(max_length=50)
gender = models.CharField(max_length=10)
order_date = models.DateField(blank=True,null=True)
issue_date = models.DateField(blank=True,null=True)
def __str__(self):
return self.name
class Male(models.Model):
contact1 = models.ForeignKey(Contact, on_delete=models.CASCADE,null=True)
chest = models.CharField(max_length=30 , blank=True)
neck = models.CharField(max_length=30 , blank=True)
full_shoulder_width = models.CharField(max_length=30 , blank=True)
right_sleeve = models.CharField(max_length=30 , blank=True)
left_sleeve = models.CharField(max_length=30 , blank=True)
bicep = models.CharField(max_length=30 , blank=True)
def __str__(self):
return self.chest
class Female(models.Model):
contact2 = models.ForeignKey(Contact, on_delete=models.CASCADE, null=True)
fchest = models.CharField(max_length=30 , blank=True)
fneck = models.CharField(max_length=30 , blank=True)
fwaist = models.CharField(max_length=30 , blank=True)
seat = models.CharField(max_length=30 , blank=True)
shoulder_width = models.CharField(max_length=30 , blank=True)
arm_length = models.CharField(max_length=30 , blank=True)
Views.py
def add(request):
template_name = 'add.html'
f_form = ''
c_form = ''
m_form = ''
contact = ''
contact = Contact.objects.all()
if request.method =='POST':
c_form = commentForm(request.POST)
m_form = maleForm(request.POST)
f_form = femaleForm(request.POST)
if c_form.is_valid() and (m_form.is_valid() or f_form.is_valid()):
gender = c_form.cleaned_data.get('gender')
username= c_form.cleaned_data.get('name')
c_form.save()
if gender == 'female':
c_form.save()
f_form.save()
messages.success(request, f"Form Submitted: {username}")
return redirect("success")
else:
c_form.save()
m_form.save()
messages.success(request, f"Form Submitted: {username}")
return redirect("success")
else:
c_form = commentForm()
m_form = maleForm()
f_form = femaleForm()
context = {
'c_form' : c_form,
'm_form' : m_form,
'f_form' : f_form,
'contact' : contact,
}
return render(request , template_name , context)
forms.py
from django import forms
from .models import Contact , Male ,Female
class commentForm(forms.ModelForm):
class Meta:
model = Contact
fields = '__all__'
class maleForm(forms.ModelForm):
class Meta:
model = Male
fields = ('chest' , 'neck' , 'full_shoulder_width' ,'right_sleeve' , 'left_sleeve' ,'bicep' )
class femaleForm(forms.ModelForm):
class Meta:
model = Female
fields = ('fchest' , 'fneck' , 'fwaist' ,'seat' , 'shoulder_width' ,'arm_length' )
【问题讨论】:
-
兄弟你需要在 c_form.save() 之后为 m_form 或 f_form 设置外键值
-
谢谢。我得到了熟练的答案
标签: python python-3.x django