web2py, один ко многим, не обязательные отношения

Рассмотрим 2 таблицы в веб-фреймворке web2py python.

По умолчанию auth_user

и этот:

b.define_table(
    'artwork',
    Field('user_id', 'reference auth_user', required=False),
    Field('name'),
    Field('description', 'text')
    )

Теперь, когда я перехожу к администрированию базы данных в (appadmin), я ожидаю, что user_id будет необязательным. Если я позволю выпадающему выбору пустым, при ручном вводе записи в таблицу изображений он говорит: «значение не в базе данных», что соответствует оператору required=False.

Я хотел бы иметь возможность вставлять произведение искусства без user_id

Может ли кто-нибудь помочь мне решить эту проблему? Большое спасибо


person PyWebDesign    schedule 22.01.2014    source источник


Ответы (2)


Когда вы создаете ссылочное поле, по умолчанию оно получает валидатор requires=IS_IN_DB(...). Атрибут requires применяется на уровне форм, тогда как атрибут required применяется на уровне DAL. Чтобы переопределить валидатор формы по умолчанию, вы можете сделать:

Field('user_id', 'reference auth_user', requires=None)

или альтернативно,

Field('user_id', 'reference auth_user',
      requires=IS_EMPTY_OR(IS_IN_DB(db, 'auth_user.id',
                                    db.auth_user._format)))
person Anthony    schedule 22.01.2014

Однако ответ @Anthony был правильным в настоящее время >больше не нужно явно записывать часть IS_EMPTY_OR(...) для поля, на которое указывает ссылка, потому что она будет установлена ​​автоматически, начиная с web2py 2.16.x или более поздней версии.

person RayLuo    schedule 24.06.2019