Уведомления

Группа в Telegram: @pythonsu

#1 Сен. 9, 2015 22:38:49

kaldown
Зарегистрирован: 2015-07-16
Сообщения: 23
Репутация: +  0  -
Профиль   Отправить e-mail  

[SOLVED] Flask-admin get_pk_value

Вечер добрый.

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

Нужно получить id модели при внесении изменений, дохожу до этого следующим образом:

class MyClass(ModelView):
    def on_model_change(self, form, model, is_created):
        if is_created:
            ...
        else:
            id = get_pk_value(model)
            ...
        if not custom_validator(id):
            raise ValidationError('not valid')
        super().on_model_change(form, model, is_created)
Вот с созданием все работает норм, а если изменять, то выдает
NameError: name 'get_pk_value' is not defined
Вообще не понимаю почему так, ведь ModelView взят из flask_admin.contrib.sqla, и он сей метод есть в dir(ModelView)
Дока

Спасибо большое!

Отредактировано kaldown (Окт. 1, 2015 21:19:23)

Офлайн

#2 Сен. 9, 2015 23:03:28

Alen
Зарегистрирован: 2013-08-01
Сообщения: 373
Репутация: +  49  -
Профиль   Отправить e-mail  

[SOLVED] Flask-admin get_pk_value

self потеряли?

Офлайн

#3 Сен. 10, 2015 06:56:06

kaldown
Зарегистрирован: 2015-07-16
Сообщения: 23
Репутация: +  0  -
Профиль   Отправить e-mail  

[SOLVED] Flask-admin get_pk_value

Тогда он так ответит:

File "/usr/home/kaldown/projects/flask/app/views.py", line 85, in on_model_change
id_row = get_pk_value(self, model)
NameError: name 'get_pk_value' is not defined

Собсно вот больше инфы:

app/views.py

def on_model_change(self, form, model, is_created):
        if not_empty(form.name.data):
            if is_created:
                have_count = count_sum(form.count.name, form.name.data) -\
                            count_sum(form.count_out.name, form.name.data)
            else:
                id = get_pk_value(form)
                count, count_out = rollback_count(id)
                have_count = count_sum(form.count.name, form.name.data) -\
                            count_sum(form.count_out.name, form.name.data) -\
                            count + count_out
                            
            if form.count_out.data > have_count + form.count.data:
                raise ValidationError('На выход больше чем имеется')
        else:
            super().on_model_change(form, model, is_created)

app/models.py

def count_sum(what_to_sum, where_to_sum):
    with conn.cursor() as cur:
        cur.execute(
                """
                SELECT SUM(%s) FROM garage WHERE
                lower(name)=lower('%s')
                """
                % (what_to_sum, where_to_sum))
        return cur.fetchone()[0]
def not_empty(name_field):
    with conn.cursor() as cur:
        cur.execute(
                """
                SELECT name FROM garage WHERE lower(name)=lower('%s')
                """
                % (name_field))
        return cur.fetchone() is not None
def rollback_count(id_row):
    with conn.cursor() as cur:
        cur.execute(
                """
                SELECT count,count_out FROM garage WHERE id=%s
                """
                % (id_row))
        return cur.fetchone()

Суть в том что есть 2 колонки, count и count_out.
Я хочу чтоб нельзя было вписать count_out больше чем count. Что-то на подобии складской логики.
Прошу сильно не бить

Спасибо.

Отредактировано kaldown (Сен. 10, 2015 07:02:08)

Офлайн

#4 Сен. 10, 2015 07:54:02

i.slepov
Зарегистрирован: 2015-05-28
Сообщения: 53
Репутация: +  5  -
Профиль   Отправить e-mail  

[SOLVED] Flask-admin get_pk_value

kaldown
Тогда он так ответит:
kaldown
get_pk_value(self, model)

А self то не там.

self.get_pk_value(model)

Офлайн

#5 Сен. 10, 2015 08:25:19

kaldown
Зарегистрирован: 2015-07-16
Сообщения: 23
Репутация: +  0  -
Профиль   Отправить e-mail  

[SOLVED] Flask-admin get_pk_value

Тяжело конечно быть глупым.
Спасибо большое за помощь.
Отличный форум!

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version