2017-10-22 10 views
1

ブログアプリケーションのモデルを作成しました。これは私のmodels.pyです:私は、私はエラーを取得していたモデルを移行しようとしたDjango移行エラー:エラー: 'choices'は反復可能(リストやタプルなど)である必要があります

from django.db import models 
from django.utils import timezone 
from django.contrib.auth.models import User 
# Create your models here. 
class post(models.Model): 
    STATUS_CHOICE=(
     ('draft','DRAFT'), 
     ('published','Published'), 
    ) 

    title=models.CharField(max_length=250) 
    slug=models.SlugField(max_length = 250,unique_for_date='publish') 
    author=models.ForeignKey(User,related_name='blog_posts') 
    body=models.TextField() 
    publish=models.DateTimeField(default=timezone.now) 
    created = models.DateTimeField(auto_now_add=True) 
    updated=models.DateTimeField(auto_now=True) 
    status = models.CharField(max_length=10, 
           choices = 'STATUS_CHOICES', 
            default='draft') 
    class Meta: 
     ordering = ('-publish',) 
    def __str__(self): 
     return self.title 

:ここ

ERRORS: 
myblog.post.status: (fields.E004) 'choices' must be an iterable (e.g., a list or tuple). 

は私のadmin.pyファイルです:

from django.contrib import admin 
from .models import post 

# Register your models here. 
admin.site.register(post) 

してください誰も私がこの問題を解決するのを助けることができますか?

答えて

2

choicesあなたは上記の宣言したリストではなく、文字列を参照する必要があります。

status = models.CharField(max_length=10, 
          choices = STATUS_CHOICE, 
           default='draft') 
+1

微妙なバグ: 'STATUS_CHOICES'はOPsコードの中で文字列として間違っているだけでなく、' STATUS_CHOICE'として宣言されています –

+1

@ThomasJunkありがとう!!! – PRMoureu

0

status = models.CharField(max_length=10, 
         choices = 'STATUS_CHOICES', 
          default='draft') 

TOでSTATUSの選択肢から引用符を削除してください:

status = models.CharField(max_length=10, 
         choices = STATUS_CHOICE, 
          default='draft') 
+0

おかげで問題が解決しました –

+0

しかし、私はpython manage、py makemigrationsというコマンドを使っている間にエラーが発生しました:デフォルトなしで投稿できないnullのフィールド 'author'を追加しようとしています。私たちはそれを行うことはできません(データベースには既存の行を追加するための何かが必要です)。 修正を選択してください: 1)今すぐ一度のデフォルトを指定してください(この列にnull値を持つ既存のすべての行に設定されます) 2)終了して、models.pyにデフォルトを追加します オプション –

+0

エラーではありません...気にしないでください。それはあなたのDBテーブルで行われるものです... そのフィールドのデフォルトを指定するか、そのフィールドで取得します。 – garmoncheg

関連する問題