【发布时间】:2017-01-29 21:50:14
【问题描述】:
我以一个简单的形式成功实现了 django-selectable AutoCompleteSelectField,允许您输入注释描述和相应的域类别(从其他多对一关系中选择的域和外键
查看:最相关的代码:
# MODEL
class Note(models.Model):
notetext = models.TextField(default='nota')
domain = models.ForeignKey(Domain)
def __str__(self):
return self.notetext
def get_absolute_url(self):
return reverse('note:note_detail', args= [self.id])
# FORM
class NoteForm(forms.ModelForm):
domainselect = AutoCompleteSelectField(lookup_class= DomainLookup, label='Pick a domain category', required=True,)
def __init__(self, *args, **kwargs):
super(NoteForm, self).__init__(*args, **kwargs)
domaintext = self.instance.domain.title
self.fields['domainselect'].widget = AutoCompleteSelectWidget(DomainLookup , { 'value': self.instance.domain.title } )
def save(self, commit=True):
self.instance.domain = self.cleaned_data['domainselect']
return super(NoteForm, self).save(commit=commit)
class Meta:
model = Note
fields = ('notetext',)
widgets = {
'domain' : AutoCompleteSelectWidget(DomainLookup), }
# VIEW
class EditNoteView(generic.edit.UpdateView):
model = Note
form_class = NoteForm
success_url = "/note/"
def get_queryset(self):
base_qs = super(EditNoteView, self).get_queryset()
return base_qs.filter()
def get_object(self):
object = get_object_or_404(Note,id=self.kwargs['id'])
return object
# TEMPLATE
{% extends "base_sidebar.html" %}
{%block content%}
<form action="" method="post">
{{form.as_p}}
<button type="submit">Save</button>
{% csrf_token %}
{% load selectable_tags %}
{{ form.media.css }}
{{ form.media.js }}
</form>
{%endblock%}
现在,当在 Modelform 中通过 generic.edit.UpdateView 选择现有记录进行编辑时,我想用加载表单时之前保存到数据库中的相应值(域描述和 id)填充 AutocompleteSelectField。
通过覆盖 NoteForm 的 init(self, *args, **kwargs) 方法,在第一个 HTML 输入字段被填充的意义上,我几乎可以做到这一点。 但是,隐藏的输入值被设置为相同的值,并且按下保存按钮会导致发布无效的表单,就好像没有选择域类别一样。
这是发送回浏览器的页面源代码:
<p><label for="id_domainselect_0">Pick a domain:</label>
<input data-selectable-allow-new="false" data-selectable-type="text" data-selectable-url="/selectable/domain-domainlookup/" id="id_domainselect_0" name="domainselect_0" type="text" value="politics" />
<input data-selectable-type="hidden" id="id_domainselect_1" name="domainselect_1" type="hidden" value="politics" /></p>
我不知道如何更改上下文(通过设置 self.fields['domainselect'].widget)以便将标题放入 domainselect_0 输入值并将相应的 pk 放入隐藏的 domainselect_1 输入值。 ?
感谢您帮助我。
【问题讨论】:
标签: django jquery-ui-autocomplete