django - 如何使用模型实例的一些参数初始化表单
问题描述
我希望能够使用模型实例的组/用户手动发送 SMS/电子邮件通知。假设模型如下所示:
class Memo(models.Model):
title = models.CharField(max_length=100)
receiver = models.ManyToManyField(EmployeeType, related_name='memos_receiver')
我将对象实例传递给视图:
path('<int:pk>/notify', NotificationView.as_view(), name='memos-notify'),
表单和视图是我遇到麻烦的地方。我想我应该能够在视图中传递表单初始字段:
class NotificationView(FormView):
template_name = 'memos/notification_form.html'
form_class = MemoNotificationForm
success_url = reverse_lazy('overview')
def get_initial(self):
initial = super(NotificationView, self).get_initial()
memo = Memo.objects.filter(id=id)
initial['receiving_groups'] = memo.receiver.all()
return initial
表格如下所示:
class MemoNotificationForm(forms.Form):
class Meta:
fields = [
'receiving_groups'
]
receiving_groups = forms.MultipleChoiceField(
required=False,
widget=forms.CheckboxSelectMultiple)
*注意:receiving_groups
将是收到通知的人。一旦表格有效,我将应用一种send_sms
方法发送它。
TypeError: int() 参数必须是字符串、类似字节的对象或数字,而不是“builtin_function_or_method”
我需要在表单中初始化查询集吗?如果有人能清楚地了解这里的原因和方式,将不胜感激。谢谢!
解决方案
错误是因为这条线,
memo = Memo.objects.filter(id=id)
在这里,在您的范围内,id
成为python 的内置功能,因此出现错误。
要访问 URL 参数,您应该使用self.kwargs
属性,如下所示
class NotificationView(FormView):
template_name = 'memos/notification_form.html'
form_class = MemoNotificationForm
success_url = reverse_lazy('overview')
def get_initial(self):
initial = super(NotificationView, self).get_initial()
memo = Memo.objects.filter(id=self.kwargs['pk'])
initial['receiving_groups'] = memo.receiver.all()
return initial
您可以在此处的 Django 官方文档中找到工作示例,动态过滤
推荐阅读
- php - Magento2 (2.4.1) 在执行 health_check 并使用 redis-server 时刷新缓存时崩溃
- android - 在没有“应用签名”的情况下为 Google Playstore 中的应用设置新的上传密钥
- reactjs - 如何从 next.js getServerSideProps() 中的包装器获取客户端?
- javascript - 需要帮助创建 Javascript 正则表达式
- variables - (Neo4j) 在后续查询中携带变量
- ios - Firebase Cloud Messaging:如何上传 APNs 身份验证密钥?
- python - Python根据特定模式在另一行下添加行
- kubernetes - 使用不同的 kustomization.yaml 名称
- php - 格式错误,preg_match() espera que el parametro 2 cadena de mar,给定数组,php
- ionic-framework - 离子存储错误缺少依赖项:@angular/core