Django и fieldsets на ModelForm

Если вы используете Json.Net 5.0.5 или позже, и вы готовы изменить тип своего словаря от Dictionary до Dictionary, тогда один простой способ выполнить вы хотите добавить атрибут [JsonExtensionData] к свойству словаря следующим образом:

public class Test
{
    public string X { get; set; }

    [JsonExtensionData]
    public Dictionary Y { get; set; }
}

Затем ключи и значения помеченного словаря будут сериализованы как часть родительского объекта. Бонус в том, что он работает и при десериализации: любые свойства в JSON, которые не соответствуют членам класса, будут помещены в словарь.

38
задан Krystian Cybulski 6 February 2009 в 13:26
поделиться

3 ответа

Fieldsets в modelforms находятся все еще на этапе "дизайна". Существует билет в Django trac с низким действием.

Это - что-то, что я интересовался исследованием меня в ближайшем будущем, но так как я еще не сделал этого лучшее, которое я могу предложить, эти отрывки:

: я просто заметил этот вопрос снова, и я понимаю, что ему нужно редактирование для указания на проект django-form-utils Carl, который содержит класс BetterForm, который может содержать fieldsets. Если Вам нравится этот проект, дают ему +1 для его ответа ниже :)

34
ответ дан Van Gale 23 September 2019 в 18:54
поделиться

Я думаю , этот отрывок делает точно, что Вы хотите. Это дает Вам подкласс Формы, который позволяет Вам декларативно подразделять свою форму на fieldsets и выполнять итерации через них в Вашем шаблоне.

Обновление: тот отрывок с тех пор стал частью django-form-utils

50
ответ дан Carl Meyer 23 September 2019 в 18:54
поделиться

Одна вещь, которую можно сделать, повредить логический fieldsets в отдельные образцовые классы формы.

class PersonalInfoForm (forms.ModelForm):
    class Meta:
        model=MyModel
        fields=('field1', 'field2', ...)

class TermsForm (forms.ModelForm):
    class Meta:
        model=MyModel
        fields=('fieldX', 'fieldY', ...)

Передают их Вашему шаблону в различных переменных и разбивают formsets:

<form ...>
   <fieldset><legend>Personal Information</legend>
       {{ personal_info_form }}
   </fieldset>
   <fieldset><legend>Terms and Conditions</legend>
       {{ terms_form }}
   </fieldset>
</form>

В этом смысле каждый из Ваших классов формы является просто фрагментом фактической HTML-формы.

Это представляет легкую сложность, когда Вы звоните, экономят на форме. Вы, вероятно, захотите передать commit=False и затем объединить результирующие объекты. Или просто избегайте использования ModelForm.save в целом и заполните свой объект модели вручную с 'cleaned_data'

16
ответ дан Joe Holloway 23 September 2019 в 18:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: