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



首先,我对部署非常陌生。我在windows机器中使用Django创建了一个新的报纸项目。它在localhost中运行良好。现在我想将它部署在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]

正如您所看到的,如果"filter"没有找到任何内容,它将引发一个错误-列表索引超出范围。总的来说,我的代码将在没有任何临时模型数据的情况下崩溃(目前,尽管大多数是lorem ipsum。(我在代码完成之前就已经填充了它们。现在,我该如何部署我的项目,因为我可能因为这些错误而没有机会再次在线填充它们。而且我的调试将是错误的,运行我的代码而不发现错误几乎是不可能的!

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

1.在部署时以某种方式上传sqlite3数据库,然后在配置之后MySQL,动态地将数据从sqlite3传输到MySQL(我也不知道如何做到这一点。(

2.只需注释掉"model"中除创建视图,然后部署它。用该视图填充数据库后,我将删除Github中的提交并从那里更新代码(对我来说,这几乎是神话(。

对于这类情况有什么惯例吗?我应该采取什么方法?任何帮助都将不胜感激。

为了不从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

最新更新