2016-12-03 2 views
1

Я пытаюсь добавить новый элемент, используя мою веб-форму.Недопустимое ограничение NULL, но поле не пусто

Но я получаю эту ошибку. Письмо не является нулевым, но я проверял его из инструкции печати.

на этой линии

File "/Users/j/udacity/item_catalog/item-catalog-190/application.py", line 131, in newItem 
    session.commit() 


IntegrityError: (sqlite3.IntegrityError) NOT NULL constraint failed: category.email [SQL: u'INSERT INTO category (name, email) VALUES (?, ?)'] [parameters: (u'Pilates', None)] 


@app.route('/catalog/new', methods=['GET','POST']) 
def newItem(): 
    if request.method == 'POST': 
     placeholder=request.form['category'] 
     category = Category(name=placeholder) 
     print "**********", login_session['email'] 
     email = login_session['email'] 
     newThing = Item(name=request.form['name'], description=request.form['description'], price=request.form['price'],category=category, email=email) 
     session.add(newThing) 
     session.commit() 
     return redirect('/catalog') 
    else: 
     return render_template('newitem.html') 

Это мои две таблицы.

class Item(Base): 
__tablename__ = 'item' 

name = Column(String(80), nullable=False) 
id = Column(Integer, primary_key=True) 
description = Column(String(250)) 
price = Column(String(8)) 
category_id = Column(Integer, ForeignKey('category.id')) 
email = Column(String(250),nullable=False) 
category = relationship(Category) 


class Category(Base): 
__tablename__ = 'category' 

id = Column(Integer, primary_key=True) 
name = Column(String(250), nullable=False) 
email = Column(String(250), nullable=False) 

ответ

4

Вашего category стол требует email поля, чтобы быть NOT NULL, и при создании новой категории:

category = Category(name=placeholder) 

Значение по умолчанию email поля NULL.

Это запрос для INSERT:

SQL: u'INSERT INTO category (name, email) VALUES (?, ?)'] [parameters: (u'Pilates', None) 

Как вы можете видеть, второй paramenter (который является email) нет (что переводится null в SQL

Вы могли бы хотеть. измените свой код на:

if request.method == 'POST': 
    placeholder=request.form['category'] 
    email = login_session['email'] # moved the email here 
    print "**********", login_session['email'] 
    category = Category(name=placeholder, email=email) # here you have the email variable so you can use it 
+0

Спасибо. Я также понял, что моя ошибка в том, что я не пытаюсь создать новую категорию. Скорее я хочу, чтобы пользователь выберите из существующих категорий, поэтому я должен внести эти изменения. Спасибо, что объяснил это мне. Также я понял, что это потому, что я добавил поле электронной почты позже и забыл добавить поле электронной почты в этом месте. – John

+0

Добро пожаловать! – Dekel

+0

Я поддержал его. Но я пока не могу принять ответ. Я должен подождать еще шесть минут. Спасибо, что ответили так быстро. – John