djangoで選択可能なAutoCompleteSelectFieldを簡単なフォームで実装しました。これにより、ノートの説明と対応するドメインカテゴリ(他の多対1の関係django-selectable populate 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を経由して編集するために選択され、私は対応する値(ドメインの説明でAutocompleteSelectFieldを移入したいとid)以前はロード時にデータベースに保存されていましたフォーム。
NoteFormのinit(self、* args、** kwargs)メソッドを上書きすることで、最初のHTML入力フィールドにデータが入力されるという意味で、これまでのところほとんどこれを取得できました。 しかし、非表示の入力値は同じ値に設定され、保存ボタンを押すとドメインカテゴリが選択されていないかのように有効でないフォームが表示されます。
ここでブラウザに送り返されるページのソースです:(。self.fieldsを設定することにより、[「domainselectを」]ウィジェット)
<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>
私は、コンテキストを変更する方法がわからないのためにタイトルをdomainselect_0入力値に、対応するpkを非表示のdomainselect_1入力値に取得します。 ?
私を助けてくれてありがとう。