iam новичок с Django, и у меня есть проблема, которую я пока не могу решить, даже если у меня есть понимание того, что не происходит.Django Modelform, изменяющий ввод пользователя перед проверкой
У меня есть модель с HStore полевой
models.py
--------
class myModel(models.Model):
myVariable = HStoreField()
forms.py
----- ---
class myModel(forms.ModelForm):
class Meta:
model = myModel
fields = (
'myVariable',
)
вот что я пытаюсь достичь. Я хочу, чтобы пользователю ввести через запятую список О.Б. строк в примере ввода пользователя в поле HStore может быть
«» «String1, String2, String3, String4„“» (без квот)
что я пытаюсь сделать, это преобразовать этот «список/строку» в формат соответствия JSON в качестве словаря, учитывая, что в этом случае он должен выглядеть так:
{"String1": "", "String2": "" , "String3": "", "String4": ""}
Я написал для этого функцию. Логика функции должна работать, и я знаю, что она не работает, потому что если функция is_valid() вызывается в представлении, функция clean() запускается после проверки, в любом случае здесь функция.
forms.py на вершине "класса мета:"
def clean(self):
cleaned_data = self.cleaned_data
str_inputTags = cleaned_data.get('act_tags_Hstore')
if str_inputTags:
# Splitting the input String into a list of tags
list_tags = str_inputTags.split(",")
# Construct JSON Dict string out of the list of tags
for tag in list_tags:
str_inputJSON = "\"%s\": \"\", " % (tag)
# Remove the last added comma and space from the string
str_inputJSON = str_inputJSON[:-2]
# Add { in front and } to the back of the entered string
str_inputJSON = "{" + str_inputJSON + "}"
# Setting the cleaned_data to the newly constructed string
cleaned_data['act_tags_Hstore'] = str_inputJSON
return cleaned_data
Вот ошибки я получаю в виде
Не удалось загрузить данные в формате JSON.
До сих пор я считаю, что то, что я пытаюсь сделать, не будет работать в рамках чистого метода, и ни в методе clean_field1, я, вероятно, не должен выполнять описанную выше операцию до вызова метода to_python. Поскольку прямо сейчас поле проверяется до вызова метода/clean. Но я не понимаю, как это сделать в данный момент.
Но ... этот код не может работать. Возьмите его вне контекста формы, и вы увидите ряд логических ошибок, не в последнюю очередь из-за которых вы повторно переписываете 'str_inputJSON' без конкатенации. Во всяком случае, у Python есть отличная библиотека 'json' для создания JSON из текста. –
Да, вы правы, цикл должен читаться следующим образом: «для тега в list_tags: str_inputJSON = str_inputJSON +" \ "% s \": \ "\", "% (tag)" – Burnie800
Нет. Что это даже должно быть? Вы не должны создавать JSON путем конкатенации текста * вообще *. Используйте модуль 'json' из стандартной библиотеки. –