2

Web2py で null 以外の外部キーを生成するモデルを作成する際に問題があります。私が知っていること、および Web で見つけられることはすべて試しました。簡単な例を次に示します。

db = DAL('sqlite://storage.db')
users=db.define_table('user', Field('name') )
cars=db.define_table('cars', Field('user', users, notnull=True), Field('Model') )
print db._lastsql

This print ===
CREATE TABLE cars(
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    user INTEGER REFERENCES users(id) ON DELETE CASCADE,
    Model CHAR(512)
);
=============

何らかの理由で web2py が notnull=True を無視したようです。

default='' を指定するなどのいくつかの回避策も試しましたが、役に立ちませんでした。MySQL バックエンドを使用した別の例を次に示します。

db = DAL('mysql://test:test@localhost:3306/test')
db.define_table('property',
   Field('type', notnull=True),
   Field('area','integer', notnull=True),
   Field('rooms','integer', default = 0, notnull=True))

db.define_table('media',
   Field('title', length = 30),
   Field('file', 'upload', autodelete=True, notnull=True),
   Field('prop_id', db.property, notnull=True, default='', required=True))

CREATE TABLE SQL:
CREATE TABLE  `propdb`.`media` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `title` varchar(30) DEFAULT NULL,
  `file` varchar(512) NOT NULL,
  `prop_id` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `prop_id__idx` (`prop_id`),
  CONSTRAINT `prop_media_ibfk_1` FOREIGN KEY (`prop_id`) REFERENCES `prop_property` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8

MySQL では、notnull を無視しただけでなく、列 'prop_id' を確認できるように、列 'DEFAULT NULL' を作成しました。誰でも何か考えがありますか?外部キーに 'NOT NULL' を追加するように web2py を作成する方法は?

注: default='' が削除されても、違いはありません。ここに@simplyharshの提案と議論に従って追加しましたhttp://www.mail-archive.com/web2py@googlegroups.com/msg12879.html

4

3 に答える 3

1

が設定されている場合notnull=Trueは、デフォルト属性も設定する必要があります。

このスレッドを検討してください。

于 2010-08-06T07:17:50.057 に答える
0

外部キーはすでに存在するものに対応する必要があるため、外部キーをnullにしたくないと想定しています。あなたはの線に沿って何かを試しましたか

db.property.area.requires=IS_IN_SET([Insert your list/array of possibilities])
于 2010-08-13T14:28:27.357 に答える