Если вы используете Json.Net 5.0.5 или позже, и вы готовы изменить тип своего словаря от Dictionary
до Dictionary
, тогда один простой способ выполнить вы хотите добавить атрибут [JsonExtensionData]
к свойству словаря следующим образом:
public class Test
{
public string X { get; set; }
[JsonExtensionData]
public Dictionary Y { get; set; }
}
Затем ключи и значения помеченного словаря будут сериализованы как часть родительского объекта. Бонус в том, что он работает и при десериализации: любые свойства в JSON, которые не соответствуют членам класса, будут помещены в словарь.
Fieldsets в modelforms находятся все еще на этапе "дизайна". Существует билет в Django trac с низким действием.
Это - что-то, что я интересовался исследованием меня в ближайшем будущем, но так как я еще не сделал этого лучшее, которое я могу предложить, эти отрывки:
: я просто заметил этот вопрос снова, и я понимаю, что ему нужно редактирование для указания на проект django-form-utils Carl, который содержит класс BetterForm, который может содержать fieldsets. Если Вам нравится этот проект, дают ему +1 для его ответа ниже :)
Я думаю , этот отрывок делает точно, что Вы хотите. Это дает Вам подкласс Формы, который позволяет Вам декларативно подразделять свою форму на fieldsets и выполнять итерации через них в Вашем шаблоне.
Обновление: тот отрывок с тех пор стал частью django-form-utils
Одна вещь, которую можно сделать, повредить логический 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'