5

我的 django 项目正在与第三方论坛合作。正在通过 发送activation_email get_current_site(request)。密码休息是由一个名为password_resetfrom的 django 完成的django.contrib.auth.views import

对于我需要安装的另一个应用程序django.contrib.sites。通过这get_current_site(request)并没有给我当前的网站,而是来自django.contrib.sites.models. 问题是:

  • 激活邮件确实有错误的域(example.com)
  • 当我在代码中更改 activation_mail 发件人时,密码重置邮件仍然带有“example.com”,因为它使用的是 django built_in 方式。

我的项目已经上线了。所以我想我可以删除 example.com 并添加我的域名。但是现在我无法登录了,并且出现了这个错误: django.contrib.sites.models.DoesNotExist: Site matching query does not exist.

4

1 回答 1

5

您的 Django 项目在站点模型中查找条目但找不到。因此 Django 引发了 DoesNotExist 错误。

您可以做的是重新创建已删除的 Site 对象。它不需要被调用example.com,使用适当的域名。

如果你把自己锁在外面。您始终可以创建一个 shell 会话。通过 SSH 连接到您的服务器并在具有 manage.py 类型的文件夹中:

   $ python manage.py shell
   >>> from django.contrib.sites.models import Site
   >>> site = Site(domain="yourdomain.com", name="My awesome site")
   >>> site.save()

其他模型条目可以引用旧站点对象。通常,第一个 Site 对象的主键 (id) 是 1。但是您新创建的站点对象有一些其他的 id。大多数时候你不想改变id,因为它会破坏关系。但我们试图恢复破裂的关系,所以我们开始:

   >>> print(site.id)  
   2  # The id of the current site object.
   >>> site.id = 1  
   >>> site.save()  
   >>> print(site.id)  
   1  

或者只是打开一个数据库会话并使用 SQL 语句创建这个对象。

于 2016-03-09T21:43:34.660 回答