Python 访问django modelforms中的外部字段

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

我正在创建用户配置文件,其中配置文件与工作经验有一对一的关系。我试过了

{{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.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'}),
        }