添加外键字段到表单
add foreign key fields to form
我正在尝试从这个模型创建一个表单:
class A(models.Model):
u = models.OneToOneField(User)
然后创建此表单:
class AForm(ModelForm):
class Meta:
model = A
fields = ['u']
然后我在我的视图中创建该表单的一个实例并将其作为上下文发送到我的模板我将获得一个下拉列表以从现有用户中进行选择但我想要做的是有一个文本字段更改我当前用户的名字或姓氏。
如果您能帮助我更改表格 class 以获得正确的结果,我将不胜感激。
谢谢
在这种情况下,您不需要 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
您可以通过以下方式将名字和姓氏字段添加到 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)
我正在尝试从这个模型创建一个表单:
class A(models.Model):
u = models.OneToOneField(User)
然后创建此表单:
class AForm(ModelForm):
class Meta:
model = A
fields = ['u']
然后我在我的视图中创建该表单的一个实例并将其作为上下文发送到我的模板我将获得一个下拉列表以从现有用户中进行选择但我想要做的是有一个文本字段更改我当前用户的名字或姓氏。 如果您能帮助我更改表格 class 以获得正确的结果,我将不胜感激。 谢谢
在这种情况下,您不需要 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
您可以通过以下方式将名字和姓氏字段添加到 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)