Python 使用Django检索reddit帖子

Python 使用Django检索reddit帖子,python,django,praw,Python,Django,Praw,作为学习Python/Django的一种方式,我尝试使用PRAW在Django中重新创建reddit,但遇到了一些问题。目前,我已将我的应用程序配置为连接到reddit并从IndexView类的主页检索前10篇文章,但当我尝试在我的posts模型中添加字段,然后使用makemigrations时,这会导致问题。即使我从django admin中删除数据库中的所有内容,如果我在模型中添加一个字段,然后使用python manage.py makemigrations,我也经常会收到一个错误,说没有

作为学习Python/Django的一种方式,我尝试使用PRAW在Django中重新创建reddit,但遇到了一些问题。目前,我已将我的应用程序配置为连接到reddit并从IndexView类的主页检索前10篇文章,但当我尝试在我的
posts
模型中添加字段,然后使用
makemigrations
时,这会导致问题。即使我从django admin中删除数据库中的所有内容,如果我在模型中添加一个字段,然后使用
python manage.py makemigrations
,我也经常会收到一个错误,说
没有这样的列:post_is_self
或类似的内容。当我注释掉新字段,重新启动django服务器时,帖子会返回到数据库中,尽管我还没有访问应用程序的索引

我相信问题在于我填充数据库的方式。我想在用户访问我的应用程序索引时检索最新的前10篇文章,但现在添加新字段非常困难。它似乎在检索不应该检索的帖子,而当向模型中添加新字段并调用makemigrations时,这会导致问题

这是我的IndexView课程:

class IndexView(generic.ListView):
    template_name = 'reddit/index.html'
    context_object_name = 'top_posts'

    #Get top 10 posts from the front page
    pp = pprint.PrettyPrinter(indent = 4)
    r = praw.Reddit(user_agent = user_agent)
    front_page = r.get_front_page(limit = thing_limit)
    for thing in front_page:
        # Format timestamp
        utc_dt = datetime.utcfromtimestamp(thing.created_utc).replace(
            tzinfo=pytz.utc
        )
        local_dt = local_tz.normalize(utc_dt.astimezone(local_tz))
        post = Post(
            id = thing.id,
            post_title = thing.title, 
            post_submitted_on = local_dt,
            post_upvotes = thing.ups,
            post_downvotes = thing.downs,
            post_score = thing.score,
            post_submitter = thing.author,
            post_comment_count = thing.num_comments,
            post_permalink = thing.permalink,
            post_url = thing.url,
            post_subreddit = thing.subreddit,
            post_subreddit_id = thing.subreddit_id,
            post_thumbnail = thing.thumbnail,
        )
        if thing.is_self:
            post.post_selftext = thing.selftext
        post.save()

    def get_queryset(self):
        # Return top 10 stories, in descending order by score
        return Post.objects.all().order_by('-post_score')[:10]
编辑:…和我的
Post
model:

class Post(models.Model):
    def __unicode__(self):
        return self.post_title
    id = models.CharField(
        verbose_name='Post ID',
        primary_key=True,
        max_length=200
    )
    post_title = models.CharField(
        verbose_name='Post title',
        max_length=200
    )
    post_submitted_on = models.DateTimeField(
        verbose_name='Submitted on',
        null=True
    )
    post_upvotes = models.IntegerField(
        verbose_name='Upvotes',
        null=True
    )
    post_downvotes = models.IntegerField(
        verbose_name='Downvotes',
        null=True
    )
    post_score = models.IntegerField(
        verbose_name='Score',
        null=True
    )
    post_submitter = models.CharField(
        verbose_name='Submitted by',
        null=True,
        max_length=15
    )
    post_subreddit_id = models.CharField(
        verbose_name='Subreddit ID',
        null=True,
        max_length=200
    )
    post_comment_count = models.IntegerField(
        verbose_name='Number of comments', 
        null=True
    )
    post_permalink = models.URLField(
        verbose_name='Permalink',
        null=True
    )
    post_url = models.URLField(
        verbose_name='Post URL',
        null=True
    )
    post_subreddit = models.CharField(
        verbose_name='Subreddit',
        null=True,
        max_length=200
    )
    post_thumbnail = models.URLField(
        verbose_name='Thumbnail URL',
        null=True
    )
    #post_is_self = models.BooleanField(
    #   verbose_name='Is self post?',
    #   null=True,
    #   default=False
    #)
    post_selftext = models.TextField(
        verbose_name='Self post text',
        max_length=40000,
        default='Not a self post'
    )

我是否应该在其他地方检索顶级职位?是否在将新字段添加到模型之前检索帖子?感谢您的帮助,谢谢

你能展示你的模型吗?那么调试起来会更清晰一些。还有你要添加的字段。@bad_关键点是的,完全正确。我已经编辑了我的帖子。现在我已经分享了这一点,在所有字段上设置null=True可能不是最好的主意,尽管我不一定需要所有Post对象都有这些字段。是否有一种方法可以在默认情况下设置null=True,而不必为每个字段指定该值?最好的处理方法是什么?非常感谢你的回复。你必须在每个领域都这么做。好的,我做这件事没有问题,我只是不确定这些是否是最佳实践。你能展示你的模型吗?那么调试起来会更清晰一些。还有你要添加的字段。@bad_关键点是的,完全正确。我已经编辑了我的帖子。现在我已经分享了这一点,在所有字段上设置null=True可能不是最好的主意,尽管我不一定需要所有Post对象都有这些字段。是否有一种方法可以在默认情况下设置null=True,而不必为每个字段指定该值?最好的处理方法是什么?非常感谢你的回复。你必须在每个领域都这么做。好吧,我做这件事没有问题,我只是不确定这些是否是最佳实践。