gpt4 book ai didi

django - 将列表作为初始值传递给 MultipleChoiceField 表单

转载 作者:行者123 更新时间:2023-12-05 05:16:58 25 4
gpt4 key购买 nike

我有一个名为“服务”的字段。它存储代表公司提供的服务的整数列表(1=会计,2=人力资源等)。将列表保存到“服务”字段后,我希望能够将其作为“初始”值传递给表单,以便用户可以查看他们之前选择的选项。

什么有效:

a) 用户可以选择服务

b) 服务以整数列表的形式保存到“服务”字段(例如 [2, 3, 5])

什么不起作用:

a) 尽管“服务”包含一个整数列表,但表单中没有显示初始值。

模型.py

class BaseServicesOffered(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
service = models.CharField(max_length=255, default='', null=True, blank=True)

def __str__(self):
return self.user.username

表单.py

class BaseServicesOfferedForm(forms.ModelForm):
service = forms.MultipleChoiceField(required=False, widget=forms.CheckboxSelectMultiple)

def __init__(self, *args, **kwargs):
user = kwargs.pop('user')
selectedservices = kwargs.pop('selectedservices')
super(BaseServicesOfferedForm, self).__init__(*args, **kwargs)
self.fields['service'].choices = [(t.id, t.service) for t in AllServices.objects.filter(industrycode=user.userprofile.industry)]
self.fields['service'].initial = selectedservices

class Meta:
exclude = ('user',)
model = BaseServicesOffered

View .py

@login_required(login_url="/accounts/login/")    
def baseservicesoffered(request):

try:
base_services_offered = BaseServicesOffered.objects.create(user=request.user)

except:
pass

user = request.user
services = user.baseservicesoffered.service
instance = get_object_or_404(BaseServicesOffered, user=user)
form = BaseServicesOfferedForm(request.POST or None, user=request.user, selectedservices=services, instance=instance)

if request.method == 'POST':

if form.is_valid():
instance = form.save(commit=False)
instance.user = request.user

service = form.cleaned_data['service']
services = [int(i) for i in service]
instance.service = services

instance.save()
return redirect('/accounts/profile/')

else:
context = {'form': form}
return render(request, 'accounts/setup8.html', context)

context = {'form': form}
return render(request, 'accounts/setup8.html', context)

感谢您的帮助!

最佳答案

在你的表单 __init__ 中尝试改变

self.fields['service'].initial = selectedservices

self.initial['service'] = selectedservices

并确保 selectedservices 是一个整数列表(不是像 choices 这样的对列表,也不是带逗号的字符串)。

PS:如果您将选择存储为字符串而不是整数,initial 应该是字符串列表。

关于django - 将列表作为初始值传递给 MultipleChoiceField 表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49765287/

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