(Я новичок в Django и использую кодовую базу с Django 1.8)
Есть модель (Survey), которая имеет отношение многие ко многим с другой (Page) и ссылку на начальную страницу (Page). Создание этого в панели администратора было бы очень грязным для пользователя, но это может быть решено, если они примут несколько решений Да / Нет.
Итак, на странице добавления администратора я добавил несколько выбранных полей, которые не являются частью модели (более или менее «Включить раздел A?» / «Включить раздел B?» / «Включить раздел C?» ... и т.д.), и исходя из того, что пользователь выбирает здесь, я хочу добавить разные ключи к ссылкам на страницу в Survey и на стартовую страницу.
Работать с ними хорошо, но когда форма / модель сохранена, page_links и start_page отсутствуют, возможно потому, что они не являются частью формы.
Я пытался добавить их в cleaned_data (в save или clean), но это не работает.
Вот модель:
class Survey(models.Model):
title = models.CharField(max_length=255)
start_page = models.ForeignKey('Page', related_name='surveys_started', null=True)
page_links = models.ManyToManyField('PageLink', related_name='surveys')
и вот админ:
class SurveyAdmin(admin.ModelAdmin):
fieldsets = (
(None, {
'fields': ('title', ),
}),
('User Decisions', {
'fields': ('do_a', 'do_b', 'do_c', )
}),
)
form = SurveyForm
и Форма:
class SurveyForm(forms.ModelForm):
title = forms.CharField(required=True)
do_a = forms.ChoiceField(label='Do A',choices=[(True, 'Yes'), (False, 'No')], initial=True)
do_b = forms.ChoiceField(label='Do B',choices=[(True, 'Yes'), (False, 'No')], initial=True)
do_c = forms.ChoiceField(label='Do C',choices=[(True, 'Yes'), (False, 'No')], initial=True)
def save(self, commit=True):
title = self.cleaned_data.get('title', 'N/A')
do_a = self.cleaned_data.get('do_a', True)
do_b = self.cleaned_data.get('do_b', True)
do_c = self.cleaned_data.get('do_c', True)
# Assume these two work fine
page_links = work_out_links(do_a, do_b, do_c)
start_page = get_start_page(do_a, do_b, do_c)
self.cleaned_data['page_links'] = page_links
self.cleaned_data['start_page'] = start_page
return super(SurveyForm, self).save(commit=commit)
class Meta:
exclude = ['start_page']
По сути, я просто хочу, чтобы содержимое 'page_links' и 'start_page' в save_model находилось в экземпляре Survey в БД.
(Примечание: я знаю, что из этого следует, что я должен создать промежуточный «Раздел» и просто заставить пользователя выбирать их, но предположим, что есть причины, по которым я этого не делаю, если это возможно 8))
Любая помощь очень ценится.