0

Django アプリケーションを開発していますが、次のエラーがあります。

'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ません。正しい方向に向けてください。どうもありがとう!

4

1 に答える 1

2

あなたは走っていませんModel.__init__。そうしなければなりません。

少なくとも、super(Category, self).__init__()insideのような行が必要Category.__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

しかし、これはまだ醜いです。まず最も重要なことは、tagsand category(named to categories) はプレーンテキストではなくリレーションであるべきです。

于 2012-05-07T01:48:44.717 に答える