将外键字段添加到表单中

时间:2015-06-02 09:46:34

标签: django django-forms

我试图从这个模型创建一个表单:

class A(models.Model):
    u = models.OneToOneField(User)

然后创建此表单:

class AForm(ModelForm):
    class Meta:
        model = A
        fields = ['u']

然后我在我的视图中创建该表单的实例并将其作为上下文发送到我的模板我将获得一个下拉列表以从现有用户中进行选择但我想要做的是拥有一个文本字段更改我当前用户的名字或姓氏。 如果你能帮助我改变我的表格课程以获得正确的结果,我将不胜感激。 谢谢

2 个答案:

答案 0 :(得分:2)

您可以通过以下方式将名字和姓氏字段添加到AForm ModelForm中:

class AForm(ModelForm):
  first_name = forms.CharField(max_length=30, blank=True)
  last_name = forms.CharField(max_length=30, blank=True)

  class Meta:
    Model = A

  def __init__(self, *args, **kwargs):
    super(AForm, self).__init__(*args, **kwargs)
    self.fields['first_name'].initial = self.instance.u.first_name
    self.fields['last_name'].initial = self.instance.u.last_name

  def save(self, commit=True):
    self.instance.u.first_name = self.cleaned_data['first_name']
    self.instance.u.last_name = self.cleaned_data['last_name']
    self.instance.u.save()
    return super(AForm, self).save(commit=commit)

答案 1 :(得分:0)

在这种情况下,您不需要A的模型形式,而是User的模型形式。您需要在视图中适当地设置表单的实例。例如,

a_record = A.objects.get_object_or_404(A, id=1)
form = self.UserForm(instance=a.u)  # UserForm is a modelform of User