2015-04-30 1 views
1

Я пытаюсь создать реляционную базу данных, но когда вызывается конструктор, я получаю следующую ошибку: peewee.IntegrityError: NOT NULL constraint failed language.content_id. Я пробовал по-разному, чтобы это сделать, но есть проблема при вызове models.Language.create(). Другие вызовы для вставки в таблицы работают очень хорошо. Любые идеи, как я могу это исправить? Пожалуйста помоги.peewee.IntegrityError: NOT NULL constraint failed

Вот мой код:

models.py

class User(UserMixin, Model): 
    username = CharField(unique=True) 
    email = CharField(unique=True) 
    password = CharField(max_length=100) 
    joined_at = DateTimeField(default=datetime.datetime.now) 
    is_admin = BooleanField(default=False) 

    class Meta: 
     database = DATABASE 
     order_by = ('-joined_at',) 

    def get_post(self): 
     return Post.select().where(Post.user == self) 


    @classmethod 
    def create_user(cls, username, email, password, admin=False): 
     try: 
      cls.create(
       username=username, 
       email=email, 
       password=generate_password_hash(password), 
       is_admin=admin) 
     except IntegrityError: 
      raise ValueError("User already exists") 


class Post(Model): 
    content = TextField() 

    class Meta: 
     database = DATABASE 

class Category(Model): 
    category = TextField() 

    class Meta: 
     database = DATABASE 

class Language(Model): 
    timestamp = DateTimeField(default=datetime.datetime.now) 
    content = ForeignKeyField(rel_model=Post, related_name='contents') 
    category = ForeignKeyField(rel_model=Category, related_name='topic') 
    user = ForeignKeyField(
     rel_model=User, 
     related_name='units' 
    ) 
    language = TextField() 

    class Meta: 
     database = DATABASE 

app.py

@app.route('/new_post', methods=('GET', 'POST')) 
@login_required 
def post(): 
    form = forms.PostForm() 
    if form.validate_on_submit(): 
     models.Post.create(content=form.content.data) 
     models.Category.create(category=form.choice.data.strip()) 
     models.Language.create(user=g.user._get_current_object(), 
           language=form.language.data.strip()) 
     flash("Message posted! Thanks!", "success") 
     return redirect(url_for('index')) 
    return render_template('post.html', form=form) 

ответ

1

Вы должны установить content=some_post_obj при вызове Language.create()

+0

Hi @coleifer. У меня есть контент как ForeignKeyField, поэтому я не устанавливаю 'content = some_post_obj'. – Yelp

+0

Ух, вот почему вы должны * установить его. – coleifer

+0

У меня все еще есть ошибка. Но мне не имеет смысла называть два раза метод создания контента с помощью модели Post и модели языка. Так ли это должно быть? – Yelp