Python 访问django modelforms中的外部字段
我正在创建用户配置文件,其中配置文件与工作经验有一对一的关系。我试过了 {{form.experience.job_title} 但它不起作用。如何访问工作经验字段并将其呈现为文本输入 Django版本:2.0 型号Python 访问django modelforms中的外部字段,python,django,Python,Django,我正在创建用户配置文件,其中配置文件与工作经验有一对一的关系。我试过了 {{form.experience.job_title} 但它不起作用。如何访问工作经验字段并将其呈现为文本输入 Django版本:2.0 型号 class Work_Experience(models.Model): job_title = models.CharField(max_length=100, null=True, blank=True) company = models
class Work_Experience(models.Model):
job_title = models.CharField(max_length=100, null=True, blank=True)
company = models.CharField(max_length=100, null=True, blank=True)
description = models.CharField(max_length=300, null=True, blank=True)
exp_start_date = models.DateField(null=True, blank=True)
exp_end_date = models.DateField(null=True, blank=True)
class Profile(models.Model):
user = models.OneToOneField(CustomUser, on_delete=models.CASCADE)
full_name = models.CharField(max_length=30, null=True, blank=True)
experience = models.ForeignKey(Work_Experience, on_delete=models.CASCADE, null=True, blank=True)
def __str__(self):
return str(self.user.username)
模板
<div class="field">
<label>Job title<span class="red-txt">*</span></label>
{{ form.experience }}
</div>
通过重写save()方法解决了此问题
class ProfileSettingsForm(forms.ModelForm):
class Meta:
model = Profile
fields = ['full_name','experience']
widgets = {
'full_name' : forms.TextInput({'class': 'form-control'}),
'experience' : forms.TextInput({'class':'form-control'})
}
class ProfileSettingsForm(forms.ModelForm):
job_title = forms.CharField(max_length=40, required=False)
def __init__(self, *args, **kwargs):
super(ProfileSettingsForm, self).__init__(*args, **kwargs)
self.fields['job_title'].initial = self.instance.experience.job_title
def save(self, commit=True):
model = super(ProfileSettingsForm, self).save(commit=False)
jt = self.cleaned_data['job_title']
if model.experience:
model.experience.job_title = jt
model.experience.save()
else:
model.experience = Work_Experience.objects.create(job_title=jt)
if commit:
model.save()
return model
class Meta:
model = Profile
fields = ['full_name']
widgets = {
'full_name' : forms.TextInput({'class': 'form-control'}),
}