Найти - Пользователи
Полная версия: [SOLVED] Flask-admin get_pk_value
Начало » Web » [SOLVED] Flask-admin get_pk_value
1
kaldown
Вечер добрый.

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

Нужно получить 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)
Дока

Спасибо большое!
Alen
self потеряли?
kaldown
Тогда он так ответит:
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. Что-то на подобии складской логики.
Прошу сильно не бить

Спасибо.
i.slepov
kaldown
Тогда он так ответит:
kaldown
get_pk_value(self, model)

А self то не там.

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

This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB