FlatPageExtras.child_ofの値を持たないすべてのフラットページが動的に入力されるModelChoiceFormを作成しました。これを行うために、次の設定を行います。
Forms.py:
class FlatPageExtrasForm(ModelForm):
class Meta:
model = FlatPageExtras
fields = ['head_content', 'endbody_content', 'new_page', 'child_of']
def __init__(self, *args, **kwargs):
super(FlatPageExtrasForm, self).__init__(*args, **kwargs)
self.fields['child_of'] = forms.ModelChoiceField(queryset = FlatPage.objects.filter(sites = Site.objects.get_current()).exclude(flatpageextras__child_of__isnull=False),widget = forms.Select, required = False)
views.py:
def edit(request, flatpage_id):
site = Site.objects.get_current()
...
if request.method == "POST":
if request.POST.has_key("update"):
return update(request, page)
...
else:
flatpageextras_obj, result = FlatPageExtras.objects.get_or_create(flatpage=page)
form = FlatPageForm(instance=page)
form_flatpageextras = FlatPageExtrasForm(instance=flatpageextras_obj)
レンプレート:
{{ form_flatpageextras.child_of }}<label for="id_child_of">Page on your site you would like this to appear under. </label></p>
{% if form_flatpageextras.child_of.errors %}
{{ form_flatpageextras.child_of.errors }}
{% endif %}
<p class="help-text">If a page is selected, that will be the parent site for this one. Leave blank if you would like no associations</p>
</div>
これはすべて機能します...ほぼ!提供されたテンプレートに移動すると、ドロップダウンが表示され、使用可能なフラットページが正しく表示されます。ただし、選択したページにフィールドが適切に保存されている場合でも、最初は常に空白として表示されます。ドロップダウンを取得して現在の選択を正しく表示するにはどうすればよいですか?