django - 如何从查询集中填充表单的初始值
问题描述
我有FormView
一个get_initial
方法,我试图用它来填充表单。我试图在表单中获取as 值的EmployeeType
s 。receiver
memo
def get_initial(self):
initial = super(NotificationView, self).get_initial()
users = Memo.objects.filter(id=self.kwargs['pk']).values('receiver__employee_type')
initial['receiving_groups'] = users
return initial
这里有2个问题..
- 这将返回一个查询集,如下所示:
<QuerySet [{'receiver__employee_type': 'Bartender'}, {'receiver__employee_type': 'Supervisor'}]>
当我真的需要表单中的字段EmployeeType
本身时。 - 最重要的是 - 表单甚至没有呈现这些字段。
这是以防万一的形式:
class MemoNotificationForm(forms.Form):
class Meta:
fields = [
'receiving_groups'
]
receiving_groups = forms.MultipleChoiceField(
required=False,
widget=forms.CheckboxSelectMultiple)
如何填充表单的字段?
编辑:
class Memo(models.Model):
receiver = models.ManyToManyField(EmployeeType, related_name='memos_receiver')
class EmployeeType(models.Model):
"""Stores user employee type."""
employee_type = models.CharField(
max_length=32,
unique=True)
解决方案
a Meta
on aforms.Form
不做任何事情,这用于ModelForm
s
如果receiving_groups
应该是选择,EmployeeType
那么它应该是ModelMultipleChoiceField
class MemoNotificationForm(forms.Form):
receiving_groups = forms.ModelMultipleChoiceField(
EmployeeType.objects.all(),
widget=forms.CheckboxSelectMultiple
)
然后你应该在初始时传递实例或模型的查询集
def get_initial(self):
initial = super(NotificationView, self).get_initial()
initial['receiving_groups'] = EmployeeType.objects.filter(memo__id=self.kwargs['pk'])
return initial
编辑:因为ModelForm
这可能看起来像这样
class MemoNotificationForm(forms.ModelForm):
class Meta:
model = Memo
fields = ('receiver', )
看法:
class NotificationView(FormView);
form_class = MemoNotificationForm
def get_form_kwargs(self):
kwargs = super(NotificationView, self).get_form_kwargs()
kwargs['instance'] = get_object_or_404(Memo, id=self.kwargs['pk'])
return kwargs
推荐阅读
- python - Python:python 3.6 或更早版本的 biip lib 的替代品
- ios - WKWebView 不断刷新相同的 DDOS 保护页面
- kubernetes - 如果我运行“kubectl get pod freebox”,状态会是“正在运行”吗?
- c++ - 数组中的对象不会被新对象替换
- android - 错误:W/BiChannelGoogleApi: [FirebaseAuth: ] getGoogleApiForMethod() 返回 Gms
- android - Cordova Android 应用程序强制在构建后关闭
- php - CI4 从选定的字符串中插入 ID
- python-3.x - Anaconda3 的 IPython.frontend.terminal.embed 包在哪里?
- php - 如何从 json 内容中提取键和值?
- r - R:删除除方括号“[”“]”和问号“?”之外的标点符号