django - 基于 URL 参数过滤下拉查询集
问题描述
我正在构建一个 CRM,我希望每个客户都有多个计划,并且每个计划都有多个注释。当用户创建新笔记时,我希望他们能够从属于客户的计划下拉列表中选择相关计划。据我所知,我应该能够从 kwargs 中获取 contact_id,但是我的错误在 kwargs 中没有显示任何内容。我知道应该有办法做到这一点,但我似乎无法找到它。
Variable Value
__class__ <class 'lynx.forms.SipNoteForm'>
args ()
kwargs {}
self <SipNoteForm bound=False, valid=Unknown, fields=(sip_plan;note;note_date;fiscal_year;quarter;class_hours;instructor;clients)>
视图.py
@login_required
def add_sip_note(request, contact_id):
form = SipNoteForm()
if request.method == 'POST':
form = SipNoteForm(request.POST)
if form.is_valid():
form = form.save(commit=False)
form.contact_id = contact_id
form.user_id = request.user.id
form.save()
return HttpResponseRedirect(reverse('lynx:client', args=(contact_id,)))
return render(request, 'lynx/add_sip_note.html', {'form': form})
表格.py
class SipNoteForm(forms.ModelForm):
class Meta:
model = SipNote
exclude = ('created', 'modified', 'user', 'contact')
def __init__(self, *args, **kwargs):
super(SipNoteForm, self).__init__(*args, **kwargs)
self.fields['sip_plan'].queryset = SipPlan.objects.filter(contact_id=kwargs.get("contact_id"))
网址.py
path('add-sip-note/<int:contact_id>/', views.add_sip_note, name='add_sip_note'),
解决方案
你正试图kwargs
进入__init__(self, *args, **kwargs)
def __init__(self, *args, **kwargs):
contact_id = kwargs.pop('contact_id')
super(SipNoteForm, self).__init__(*args, **kwargs)
self.fields['sip_plan'].queryset = SipPlan.objects.filter(contact_id=contact_id)
但是您contact_id
kwargs
在发布时没有传递给表单。你应该传递kwargs
给你将要进入的表格,__init__(self, *args, **kwargs)
例如
@login_required
def add_sip_note(request, contact_id):
form = SipNoteForm()
if request.method == 'POST':
form = SipNoteForm(request.POST, contact_id=contact_id)
推荐阅读
- html - 从 appscript 中基于 html 的对象抛出的格式错误的 html 错误
- java - 当奴隶尝试联系詹金斯时,詹金斯返回 403 禁止
- xml - 如何添加新的
- jsf - 如何使 CDI BeanManager 实例在 Wildfly 11.0 中可用?
- javascript - 在javascript的追加(输入)中使用onkeyup
- javascript - 如何处理不安全的 XMLHttpRequest 端点
- javascript - 如何从数据表中获取最后插入的行
- python-3.x - 由于未知原因,无法从网站上使用 python selenium binding 获取元素
- makefile - 避免 gnu make 自动删除文件
- jquery - jQuery多次触发