我在使用Django taggit“无法使用非实例管理器调用add”时遇到此错误

2024-04-26 12:08:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图在保存post对象时使用django taggit添加一些标记。所以我试过了

    def panties():
        from lxml import html
        pan_url = 'http://www.ideos.org'
        shtml = requests.get(pan_url, headers=headers)
        soup = BeautifulSoup(shtml.text, 'html5lib')
        video_row = soup.find_all('div', {'class': 'video'})
        name = 'pan videos'
        author = User.objects.get(id=1)
        tags = Post.tags.add("Musica", "video")   <------here

        def youtube_link(url):
            youtube_page = requests.get(url, headers=headers)
            soupdata = BeautifulSoup(youtube_page.text, 'html5lib')
            video_row = soupdata.find_all('script', {'type': 'text/javascript'})
            entries = [{'text': str(div),
                        } for div in video_row]

            tubby = str(entries[4])
            urls = re.findall('http[s]?://(?:[a-zA-Z]|[0-9]|[$-_@.&+]|[!*\(\),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+', tubby)
            return urls

        def embed(url):
            new_embed = url.replace("watch?v=", "embed/")
            return new_embed

        entries = [{'href': div.a.get('href'),
                    'src': youtube_link(div.a.get('href'))[1],
                    'text': div.h4.text,
                    'comments': div.h4.text,
                    'name': name,
                    'url': div.a.get('href'),
                    'embed': embed(youtube_link(div.a.get('href'))[0]),
                    'author': author,
                    'video': True,
                    'tag': tags <------here
                    } for div in video_row][:13]

但这给了我一个错误的信息

^{pr2}$

所以我试了这个

^{3}$

它给了我这个错误信息

Post对象需要有一个主键值,然后才能访问它们的标记。我该怎么做?我所做的可能吗?任何帮助都将不胜感激。在


Tags: textnamedivurlgetyoutubedefvideo
2条回答

您正在尝试向邮件管理器添加标记。 您需要将标记添加到Post实例。在

在添加标记之前,您需要一个已保存的Post实例

例如

post_instance = Post.objects.get_or_create(foo=bar) tags = post_instance.tags.add("Musica", "video")

有了“卢克欧斯回答”的助手,我想出来了。这正是我的代码看起来像现在的其他人谁可能想看看如何真正做到这一点。它是从这里来的。在

    for entry in entries:
            post = Post()
            post.title = entry['text']
            title = post.title
            if not Post.objects.filter(title=title):
                post.title = entry['text']
                post.name = entry['name']
                post.url = entry['url']
                post.body = entry['comments']
                post.image_url = entry['src']
                post.video_path = entry['embed']
                post.author = entry['author']
                post.video = entry['video']
                post.status = 'draft'
                post.save()

为了这个

^{pr2}$

希望这对某人有帮助

相关问题 更多 >