带有所需临时模型数据的Django部署

时间:2020-10-09 12:18:13

标签: python django database deployment

首先,我对部署非常陌生。 我在Windows计算机上使用Django建立了一个新的报纸项目。 它在本地主机上运行良好。 现在,我想在 pythonanywhere 中部署它。

我正在使用默认的db.sqlite3作为数据库。 但是在生产中,我将使用MySql(对此它们具有简单的设置和支持)

问题: 作为报纸,我的网站需要大量专业过滤。查找单个值 有时,我不得不对过滤后的数据使用列表索引,例如-(在获取上下文数据内):

context['main_lead_news']=SingleNews.objects.filter(
                                                    published_date__lte=timezone.now(),
                                                    news_extras__icontains='main_lead_news').order_by('-published_date')[0]

如您所见,如果“过滤器”未找到任何内容,则会出现以下错误: 列表索引超出范围。总体而言,我的代码将在没有任何临时模型数据的情况下中断(当前,尽管其中大多数是lorem ipsum。)在代码完成之前,我已将其填充。现在,我该如何部署我的项目,因为由于这些错误,我可能没有机会再次在线填充它们。而且我的调试将是错误的,几乎不可能在没有发现错误的情况下运行我的代码!

我有两个(一半!)想法-

1。部署时以某种方式上传sqlite3数据库,然后进行配置后 MySQL,将数据从sqlite3即时传输到MySQL(我也不知道该怎么做。)

2。只需注释掉“模型”中的所有视图和URL以及absolute_urls,除了 创建视图,然后部署它。通过该视图填充数据库后,我将删除Github中的提交并从那里更新代码(这对我来说似乎是神话般的)。

对于这种情况是否有约定?我应该怎么做? 任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

要不从Django ORM过滤器中获取错误,可以使用exists选项,如下所示:

news_present = SingleNews.objects.filter(published_date__lte=timezone.now(), news_extras__icontains='main_lead_news').exists()

if news_present:
      context['main_lead_news']=SingleNews.objects.filter(
                                                published_date__lte=timezone.now(),
                                                news_extras__icontains='main_lead_news').order_by('-published_date')[0]

或使用count这样的选项:

news_count = SingleNews.objects.filter(published_date__lte=timezone.now(), news_extras__icontains='main_lead_news').count()

if news_count > 0:
      context['main_lead_news']=SingleNews.objects.filter(
                                                published_date__lte=timezone.now(),
                                                news_extras__icontains='main_lead_news').order_by('-published_date')[0]

exists不会获取所有条目,而只会检查过滤器查询中是否存在任何值。因此,它返回TrueFalse。要了解更多信息:https://docs.djangoproject.com/en/3.1/ref/models/querysets/#exists

相关问题