gpt4 book ai didi

python - 如何填写表格初始数据?

转载 作者:太空宇宙 更新时间:2023-11-04 06:03:02 25 4
gpt4 key购买 nike

请帮助表单首先加载到表单字段中以显示来自数据库的数据。

模型:

class Status(models.Model):     
status = models.CharField(max_length=40, blank=False, )
@classmethod
def get_status_list(self):
status_list = list()
status_list.append(('', 'no selected'))
for values_ins in Status.objects.all().values_list('id', 'status'):
status_list.append(values_ins)
return status_list

class UserProfile(User):
name1 = models.CharField('Имя', max_length=30, blank=True, null=True, )
name2 = models.CharField('Отчество', max_length=30, blank=True, null=True, )
status = models.ForeignKey(Status, verbose_name='Статус', blank=True, null=True, )

表格:

class PersonalDataForm(forms.ModelForm):
status = forms.ChoiceField(widget=forms.Select, choices=Status.get_status_list(),label='Статус',required=False, )
class Meta:
model = UserProfile
fields = ('name1', 'name2', )

浏览量:

@login_required
def personal_data_page(request):
entry_user_profile = UserProfile.objects.get(user_ptr_id=request.user.id)
form = PersonalDataForm(instance=entry_user_profile)

if request.method == 'POST':
form = PersonalDataForm(request.POST, instance=entry_user_profile)
if form.is_valid():
form.save()
entry_user_profile.save()
return HttpResponseRedirect('/userprofile/personal_data_page_changed/')

t = loader.get_template('personal_data_page.html')
c = RequestContext(request, {'form': form,})
return HttpResponse(t.render(c))

模板:

{{ form.name1 }}
{{ form.name2 }}
{{ form.status }}

问题在于表单首次加载时,用户可以在以下字段中看到数据库中的数据:“name1”、“name2”。但在“status”中并没有看到来自数据库的数据(它显示一个点“未选择”,但必须显示与表UserProfile.status_id中的值对应的项目)

我需要在第一次加载表单时在“status”中指明某个值。请帮忙

最佳答案

您正在使用模型表单,但是您已经覆盖了表单中的状态字段,因此您需要通过覆盖 __init__ 方法手动设置初始值(一种方法,它可以也可以通过其他方式完成):

class PersonalDataForm(forms.ModelForm):
status = forms.ChoiceField(
widget=forms.Select,
choices=Status.get_status_list(),
label='Статус',
required=False
)

def __init__(self, *args, **kwargs):
super(PersonalDataForm, self).__init__(*args, **kwargs)
self.fields["status"].initial = self.instance.status.id # this line sets the value

class Meta:
model = UserProfile
fields = ('name1', 'name2', )

以下是对您的其他代码段的一些改进。

简化的 get_status_list 方法:

@classmethod
def get_status_list(self):
status_list = Status.objects.all().values_list('id', 'status')
status_list.insert(0, ('', 'no selected'))
return status_list

form.save() 之后不需要有 entry_user_profile.save()。表格save默认情况下,方法将返回更新的配置文件实例。所以下面两行:

form.save() 
entry_user_profile.save()

简化为:

entry_user_profile = form.save()

关于python - 如何填写表格初始数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23725536/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com