Peewee ORM выдает IntegrityError: user_id не может быть NULL

Я пытаюсь использовать Peewee ORM для своего нового веб-сайта (Flask) и столкнулся с проблемой. Я только что создал простую модель:

from peewee import TextField, DateTimeField, IntegerField, ForeignKeyField
from app import db

ROLE_USER = 0
ROLE_ADMIN = 1

class User(db.Model):
    nickname = TextField()
    email = TextField()
    role = IntegerField(default = ROLE_USER)

class Post(db.Model):
    body = TextField()
    timestamp = DateTimeField()
    user = ForeignKeyField(User, related_name='posts')

Итак, я создал двух пользователей, после чего хотел создать новый пост. Я сделал это так:

>>> from app.models import User
>>> u = User(nickname='john', email='[email protected]', role=0)
>>> u.save()
>>> from app.models import Post
>>> from datetime import datetime as dt
>>> p = Post(body='FIPO!!', timestamp = dt.now(), author=u)
>>> p.save()
No handlers could be found for logger "peewee"
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/Users/kramer65/dev/repos/microblog/flask/lib/python2.7/site-packages/peewee.py", line 2479, in save
    ret_pk = self.insert(**field_dict).execute()
  File "/Users/kramer65/dev/repos/microblog/flask/lib/python2.7/site-packages/peewee.py", line 1775, in execute
    return self.database.last_insert_id(self._execute(), self.model_class)
  File "/Users/kramer65/dev/repos/microblog/flask/lib/python2.7/site-packages/peewee.py", line 1470, in _execute
    return self.database.execute_sql(sql, params, self.require_commit)
  File "/Users/kramer65/dev/repos/microblog/flask/lib/python2.7/site-packages/peewee.py", line 1885, in execute_sql
    return self.sql_error_handler(exc, sql, params, require_commit)
  File "/Users/kramer65/dev/repos/microblog/flask/lib/python2.7/site-packages/peewee.py", line 1871, in sql_error_handler
    raise exception
sqlite3.IntegrityError: post.user_id may not be NULL

Я не понимаю, что user_id, по-видимому, равен NULL, потому что, насколько я понимаю, peewee должен позаботиться об этом, верно?

Я что-то делаю не так (и если да, то что?), или это проблема с peewee? Все советы приветствуются!


person kramer65    schedule 19.12.2013    source источник


Ответы (1)


Проблема в том, что вы используете author= вместо user=.

Оригинал

p = Post(body='FIPO!!', timestamp = dt.now(), author=u)

Исправлена

p = Post(body='FIPO!!', timestamp = dt.now(), user=u)
person coleifer    schedule 19.12.2013