Django Значение DateTime для ModelForm локализуется / переводится с отключенной локализацией - PullRequest
0 голосов
/ 22 марта 2020

Итак, я работаю над этой платформой управления деятельностью, мы используем Django 3.0.4. Перед тем, как разоблачить свою проблему, я должен сказать, что я немного новичок в Django и python.

Моя текущая цель - разрешить администратору устанавливать определенные c даты для указанных c Мероприятия. Изначально на странице должны отображаться текущие даты и детали. Что я уже могу сделать с кодом, показанным ниже

Это пример модели, используемой для хранения дат

class Dates(models.Model):

    id = models.AutoField(db_column='ID', primary_key=True)
    datestart = models.DateTimeField(db_column='DateStart')
    dateend = models.DateTimeField(db_column='DateEnd')

    class Meta:
        db_table = 'Dates'

Это моя форма

class dateForm(forms.ModelForm):  
    class Meta:  
        model = Dates
        exclude = ['id']

И это моя текущая функция просмотра


def editdates(request):
    dates_current = Dates.objects.get(id=1)
    dates_form = dateForm(instance=dates_current)

    if request.method == 'POST':

        submitted_data = request.POST.copy() #Might need to change incoming data before saving to db
        dates_form = diaAbertoSettingsForm(submitted_data, instance=dates_current) #Generate form with existing data

        if dates_form.is_valid():
            dates_form.save()

    return render(request=request,
                template_name = 'dates/edit.html',
                context = {'form': dates_form})

На той же странице, где отображаются данные (даты), также необходимо разрешить отправку изменений, это было бы относительно легко сделать. Настоящая проблема начинается, когда я хочу отправить форму.

В настоящее время я делаю следующее, чтобы отобразить текущие значения

<div class="column">
  <div class="field">
    {% if form.datestart.errors %}
      <div class="alert alert-danger">
        <strong>{{form.datestart.errors}}</strong>
      </div>
    {% endif %}
    <label class="label">Date Start</label>
    <div class="control">
      <input class="input" type="text" name="datestart" value='{{form.datestart.value}}'>
    </div>
  </div>
</div>

Все в порядке, пока вы не увидите, что результат из {{form.datestart.value}} это не нормальный формат даты / времени "ГГ-ММ-ДД Ч: М: С" (например, 2000-01-01 00:00:00), как вы ожидаете, но "письменный" out "format like" 1 января 2000, полночь ", что, очевидно, вызывает проблемы, когда я хочу, чтобы пользователь отредактировал эту дату. Если бы они сохраняли формат, форма возвращала бы ошибку, говоря, что формат dateTime недействителен.

Чтобы решить эту проблему, я попробовал следующее:

  1. Поворот Выключите " Форматировать локализацию " в settings.py и для шаблона по шаблонам
  2. Выключите " Перевод ", так же, как указано выше
  3. I Я пытался использовать фильтры даты, описанные в django документации
  4. Я также пытался использовать анализатор даты и времени из django utils

Я также осмотрел другие источники, кроме документации, но, похоже, ни один из них не разделяет мою проблему.

Если бы я поставил {{form.datestart}} вместо {{form.datestart.value}}, действительно заставил бы его прийти Это правильно, но так как я хочу использовать классы от bulma, я не вижу способа обойти это.

Как я могу сделать так, чтобы {{form.datestart.value}} получился как 2000-01-01 00:00:00, а не как Jan. 1, 2000, midnight?

Это только пример, реальная модель имеет около 10 различных стартов / даты окончания, поэтому способ автоматизировать их, был бы идеальным, но не обязательным.

1 Ответ

0 голосов
/ 22 марта 2020

Я исправил это. Решение было довольно простым и задним числом Это то, что я должен был сделать в начале.

Прежде всего, я отключил локализацию глобально. Во-вторых, я изменил свой modelForm на следующий

class dateForm(forms.ModelForm):  
    class Meta:  
        model = Dates
        exclude = ['id']
        widgets = {
            'datestart': DateTimeInput(attrs={'class': 'input'})
        }

Это позволило мне дать пользовательские классы для моих полей. Затем в шаблоне я заменил <input class="input" type="text" name="datestart" value='{{form.datestart.value}}'> на полное поле {{form.datestart}}.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...