在 Django 中获取表单值(外键字段)

时间:2021-06-15 21:50:09

标签: django django-models django-forms django-templates

我正在尝试将外键选项添加到选择输入,但不知道如何获取。我想与使用 Django 生成的表单相同,但使用我自己的 HTML。 该表单用于创建一个新的“患者”。

这是我的患者模型中的外键:

ubication = models.ForeignKey(Ubication, on_delete=models.CASCADE)
supervisor = models.ForeignKey(User, on_delete=models.SET_NULL, null=True)

这是病人表格:

    class PatientForm(forms.ModelForm):
        class Meta:
            model = Patient
            fields = ['dni', 'first_name', 'last_name', 'birth', 'risk', 'status', 'ubication', 'supervisor']
            widgets = {
                'dni': forms.NumberInput(attrs={'class': 'form-control'}),
                'first_name': forms.TextInput(attrs={'class': 'form-control'}),
                'last_name': forms.TextInput(attrs={'class': 'form-control'}),
                'birth': forms.DateInput(attrs={'class': 'form-control'}),
                'risk': forms.CheckboxInput(attrs={'class': 'form-control'}),
                'status': forms.Select(attrs={'class': 'form-select'}),
                'ubication': forms.Select(attrs={'class': 'form-select'}),
                'supervisor': forms.Select(attrs={'class': 'form-select'})
            }

例如,这里我想从主管模型中添加主管以将其连接到患者模型:

<select class="form-select" aria-label="Default select example" required name="supervisor" id="id_supervisor">
                    <option selected>Select supervisor</option>
                    {% for f in form.supervisor %}
                    <option value="{{f.id}}">{{f.first_name}}</option>
                    {% endfor %}
</select>

1 个答案:

答案 0 :(得分:0)

我相信您想制作选择字段,让用户根据可用的主管之一选择主管,对吗?

您可以在表单脚本中创建选项。

PatientForm 上执行以下操作:

# SUPERVISORS is the model where the supervisors are stored in your code
# you will have to modify it
from .models import SUPERVISORS

CHOICES = [ (supervisor.id, supervisor.get_full_name())
            for supervisor in SUPERVISORS.objects.all() ]

class PatientForm(forms.ModelForm):
   supervisor = forms.ChoiceField(choices=CHOICES)
      class Meta:
      # leave the rest as is

如果您想对此进行调整,您可以获得更多信息 here