2012-05-07 5 views
0

私はDjangoアプリケーションを開発している、と私は「オブジェクトが属性 『_state』がありません」エラー

'Category' object has no attribute '_state' 

私のモデルはカテゴリ、新しいブログ投稿で

class Blog(models.Model): 
    BlogMeta = models.CharField(max_length=200) 
    BlogTitle = models.CharField(max_length=100) 
    BlogContent = models.TextField() 
    BlogCategory = models.CharField(max_length=300) 
    BlogTags = models.CharField(max_length=300) 
    BlogDate = models.DateField() 
    def __unicode__(self): 
     return self.BlogTitle 
    def save(self): 
     self.BlogDate = datetime.datetime.now() 
     Categorylist = re.findall(r'\w+',self.BlogCategory) 
     TagList = re.findall(r'\w+', self.BlogTags) 
     #Get already existing tags and category 
     dbCategoryList = Category.objects.all() 
     dbTagsList = Tags.objects.all() 
     clisflag = False 
     tlisflag = False 
     #check if categories and tags in new blog exists previously or not. 
     for clis in Categorylist: 
      for dbclis in dbCategoryList: 
       if (clis == dbclis.CategoryName): 
        clisflag = True 
        break 
       else: 
        continue 

      if not clisflag: 
       createCategory = Category(clis) 
       createCategory.save() 
      clisflag = False 

     for tlis in TagList: 
      for dbtlis in dbTagsList: 
       if(tlis == dbtlis.TagName): 
        tlisflag = True 
        break 
       else: 
        continue 
      if not tlisflag: 
       createTag = Tags(tlis) 
       createTag.save() 
      tlisflag = False 

class Tags(models.Model): 
    TagName = models.CharField(max_length=20) 
    TagDesc = models.TextField(null=True) 
    def __unicode__(self): 
     return self.TagName 
    def __init__(self,name): 
     self.TagName = name 
     self.TagDesc = "" 
class Category(models.Model): 
    CategoryName = models.CharField(max_length=20) 
    CategoryDesc = models.TextField(null=True) 
    def __unicode__(self): 
     return self.CategoryName 
    def __init__(self, name): 
     self.CategoryName = name 
     self.CategoryDesc = "" 

あるエラーを以下していますカンマ区切りの値とみなされ、新しいカテゴリが見つかった場合は、そのカテゴリがデータベースに追加されます。 タグの場合も同様です。

私はこのことについて明確ではありません_stateもの、あなたは正しい方向に私を指摘できますか? ありがとう!

答えて

2

あなたはModel.__init__を実行していません。 でなければなりません。

少なくとも、super(Category, self).__init__()のような行がCategory.__init__の範囲内にある必要があります。

実際には、はるかに重要な設計上の問題があります。属性にはクラス名を含めないでください。 Category.nameで、Category.CategoryNameではありません。 Category.__init__は、独自の特殊な引数ではなく、キーワード引数を使用する必要があります。説明はnull=Trueの代わりにblank=Trueにする必要があります。 Category.__init__は必要ありません。ここで

は何をやっているのわずか整然とバージョンです:

class Blog(models.Model): 
    meta = models.CharField(max_length=200) 
    title = models.CharField(max_length=100) 
    content = models.TextField() 
    categories = models.CharField(max_length=300) 
    tags = models.CharField(max_length=300) 
    date = models.DateField() 

    def __unicode__(self): 
     return self.title 

    def save(self): 
     self.date = datetime.datetime.now() 
     category_list = re.findall(r'\w+', self.categories) 
     tag_list = re.findall(r'\w+', self.tags) 
     #check if categories and tags in new blog exists previously or not. 
     db_categories = Category.objects.all() 
     for clis in category_list: 
      for dbclis in db_categories: 
       if clis == dbclis.name: 
        break 
      else: 
       new_category = Category(name=clis) 
       new_category.save() 

     db_tags = Tags.objects.all() 
     for tlis in tag_list: 
      for dbtlis in db_tags: 
       if tlis == dbtlis.name: 
        break 
      else: 
       new_tag = Tags(name=tlis) 
       new_tag.save() 


class Tags(models.Model): 
    name = models.CharField(max_length=20) 
    desc = models.TextField(blank=True) 
    def __unicode__(self): 
     return self.name 


class Category(models.Model): 
    name = models.CharField(max_length=20) 
    desc = models.TextField(blank=True) 
    def __unicode__(self): 
     return self.name 

これはしかし、まだ醜いです。まず第一に最も重要なのは、tagscategory(名前はcategoriesに変更)は、平文ではなくリレーションである必要があります。

+0

ありがとうございました!実際には、私はpython/djangoのコードを書いているので、実際にはほとんどのことについて手掛かりがありません。 また、私はあなたの提案を心に留めておきます。もう一度ありがとう! – pers3us

+0

私はそれをリレーショナルにしますが、この時点で私は多くのdjangoを知りません。私はこれを次回修正する予定です。今のところ優先順位は少なくともこれを稼ぐことです。 – pers3us

関連する問題