Форма получает старые данные из модели - PullRequest
1 голос
/ 26 сентября 2019

У меня есть форма, которая должна получить начальное значение из последней записи, хранящейся в моделях.Однако, если я редактирую или удаляю данные модели через панель администратора, исходные данные, отображаемые в форме, остаются прежними (несмотря на то, что они удаляются в моделях).Я сбит с толку, что я делаю неправильно.Сначала я подумал, что это Chrome, который сохраняет старые данные, но он остается прежним после того, как он покоится с ctr+shift+r.

My forms.py:

from stv.models import BazineKaina,

class DrgSkaiciuokle(forms.Form):
    bazine_kaina = forms.DecimalField(max_digits=5, decimal_places=2, required=True,
                                      label="Įveskite bazinę kainą:",
                                      initial= BazineKaina.objects.latest('data'),
                                      )


    def clean_bazine_kaina(self):
        bazine_kaina = self.cleaned_data['bazine_kaina']
        return bazine_kaina

My models.py:

class BazineKaina(models.Model):

    bazka = models.DecimalField(max_digits=5, decimal_places=2)

    data = models.DateField(auto_now=False, auto_now_add=True)

    def __str__(self):
        return str(self.bazka)

    class Meta:
        verbose_name_plural = "Bazinė kaina"
        get_latest_by = 'data'

Пожалуйста, помогите мне выяснить, почему старые данные все еще принимаются в форме?

РЕДАКТИРОВАТЬ: Я обнаружил, что, если я перезапустить сервер, данные будут обновлены, но это не можетбыть решением в производстве.Как заставить форму получать новые данные каждый раз, когда она вызывается?

Ответы [ 2 ]

3 голосов
/ 26 сентября 2019

Ваш DrgSkaiciuokle импортируется, когда запускается Django, и тогда создаются все атрибуты класса .Таким образом, запрос к .latest() выполняется один раз, когда вы runserver или запускаете рабочих Django, и initial больше не изменится.

Установите initial в методе __init__ формы, чтобы он вызывалсякаждый раз, когда создается экземпляр формы.

0 голосов
/ 26 сентября 2019

На основе dirkgroten совета и этого источника Я нашел полное решение:

forms.py:

class DrgSkaiciuokle(forms.Form):

    bazine_kaina = forms.DecimalField(max_digits=5, decimal_places=2, required=True,
                                      label="Įveskite bazinę kainą:",
                                      help_text="Įprastiniams skaičiavimams naudokite einamųjų metų bazinę kainą",
                                      error_messages={'max_digits': 'Bazinė kaina neturi viršyti 5 skaitmenų.'},
                                      )

    def __init__(self, *args, **kwargs):
        initial_arguments = kwargs.get('initial', None)
        updated_initial = {}
        updated_initial['bazine_kaina'] = BazineKaina.objects.latest('data')
        kwargs.update(initial=updated_initial)
        super(DrgSkaiciuokle, self).__init__(*args, **kwargs)


    def clean_bazine_kaina(self):
        bazine_kaina = self.cleaned_data['bazine_kaina']
        return bazine_kaina
...