2012-05-07 226 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__。你必須這樣做。

至少,您需要在Category.__init__內有一條線,如super(Category, self).__init__()

實際上,你有更重要的設計問題。你不應該在屬性中包含類名;它應該是Category.name,而不是Category.CategoryNameCategory.__init__應該使用關鍵字參數,而不是它自己的特殊參數。描述應該有blank=True而不是null=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

相關問題