Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django 电子邮件已保存到“谁知道在哪里”且未找到任何关系_Django_Postgresql - Fatal编程技术网

Django 电子邮件已保存到“谁知道在哪里”且未找到任何关系

Django 电子邮件已保存到“谁知道在哪里”且未找到任何关系,django,postgresql,Django,Postgresql,我在Django应用程序上注册时遇到了麻烦,但我最终用两个表单成功发布了它,这两个表单要求输入用户名、密码、密码确认、城市和电子邮件地址。当我转到Django管理页面时,我可以看到已经创建了自定义用户,但是缺少电子邮件字段。我已经运行了几次syncdb,所以我认为已经解决了,那么问题是什么呢 以下是forms.py的扩展表单: class UserWaitlistForm(forms.Form): user_city = forms.CharField(max_length=25, re

我在Django应用程序上注册时遇到了麻烦,但我最终用两个表单成功发布了它,这两个表单要求输入用户名、密码、密码确认、城市和电子邮件地址。当我转到Django管理页面时,我可以看到已经创建了自定义用户,但是缺少电子邮件字段。我已经运行了几次syncdb,所以我认为已经解决了,那么问题是什么呢

以下是forms.py的扩展表单:

class UserWaitlistForm(forms.Form):
    user_city = forms.CharField(max_length=25, required=True)
    user_email = forms.EmailField(max_length=35)
    fields = ('user_city,' 'user_email')
以下是views.py中的注册视图:

@atomic
def register(request):
    user_form = UserCreationForm()
    user_waitlist_form = UserWaitlistForm()

    if request.method == 'POST':
        user_form = UserCreationForm(request.POST)
        user_waitlist_form = UserWaitlistForm(request.POST)

    if user_form.is_valid() and user_waitlist_form.is_valid():
        new_user = user_form.save()
        Foodie.objects.create(user_wechat=new_user, user_email=user_waitlist_form['user_email'].value(), user_city=user_waitlist_form['user_city'].value())

        return redirect(reverse('home'))

    return render(request, "registration/register.html", {
        'user_form': user_form,
        'user_waitlist_form': user_waitlist_form,
    })
以下是models.py中的扩展用户模型:

class Foodie(models.Model):
    user_wechat = models.OneToOneField(User)
    user_city = models.CharField(max_length=25)
    user_waitlist_status = models.BooleanField(default=False)
    user_waitlist_num = models.IntegerField(blank=True, default=0)
    user_num_referrals = models.IntegerField(blank=True, default=0)
    user_email = models.EmailField()

    USERNAME_FIELD = 'user_wechat'

def __unicode__(self):
    return self.user_wechat.username
这是我的register.html:

{% extends "base.html" %}
{% load staticfiles %}
{% block title %}Create an account{% endblock %}
{% block content %}
<div data-role="page" id="register" data-theme="a">

    <div data-role="header" data-position="fixed" style="background-color:#EEEEEE;" data-tap-toggle="false" data-add-back-btn="true">
        <h1>Register</h1>
    </div><!-- /header -->
  <h1>Create an account</h1>

  <form action="" method="post">
    {{ user_form.as_p }}
    {{ user_waitlist_form.as_p }}
    <input type="submit" value="Create an account"/>
    {% csrf_token %}
  </form>
{% endblock %}
  • 建议我从数据库中删除已经存在的表,但当我进入psql shell(我使用的是9.2)并键入\d或\dt db_chishenma(数据库名称)时,它说,“未找到任何关系”/“未找到任何匹配关系”,即使\list返回了包含我的数据库(db_chishenma)的列表


  • 我的数据库好像有问题。显然存在一个数据库,但如何访问它并删除chishenma_app_category表?这会解决缺少电子邮件地址的问题吗?

    关于您使用的
    psql
    ,命令
    \dt db_chishenma
    将查找一个名为db_chishenma表,这就是为什么出现
    未找到任何关系的
    错误

    您可以通过将db指定为最后一个参数,直接从cmdline连接到db,即

    psql -h <host> -U <user> -p <port> <dbname>
    
    只有在未启用
    自动提交
    的情况下,
    提交才是必需的

    编辑并回复OP的评论:

    重新同步后,电子邮件字段是否实际添加到
    Postgres
    中的表中

    此外,在执行同步时,您可能希望尝试增加
    详细程度
    ,以查看是否会产生任何额外信息。这是通过选项
    --verbosity 2
    完成的。你可以把它增加到3,以获得更多信息


    听起来好像南部
    可能与DB不同步。根据增加的详细内容,可能建议按照您链接的票证中关于
    南部
    迁移文件和历史的其他步骤进行操作。

    根据Ken的建议,我使用“psql-h localhost-U michelleglauser db_chishenma”进入psql shell,然后\dt查看我的表

    我使用“从chishenma_app_Foodie中选择*”,查看了Foodie模型(我的扩展用户模型),发现用户电子邮件实际上包含在那里,尽管它不在管理GUI中。我还比较了auth_user表(使用“SELECT*FROM auth_user;”)和管理GUI,发现两者都有空的电子邮件字段,因此似乎只有Foodie模型处于关闭状态。在深入研究之后,我意识到我所要做的(!)就是在admin.py中添加“user\u email”以列出显示的内容,这样已经成功保存的电子邮件地址就会显示在Foodie的管理GUI中。整行现在与psql表完全对齐,如下所示:

    list_display = ('user_wechat', 'user_city', 'user_waitlist_status', 'user_waitlist_num', 'user_num_referrals', 'user_email')
    

    新手犯的错误导致了一个看起来比实际情况复杂得多的问题

    哦,我明白了,谢谢。当我放下桌子时,我不得不做一个瀑布式下降。然后我删除了我的migrations目录并进行了syncdb,当我进行迁移时,我必须使用--delete ghost migrations。我原以为所有这些都可以摆脱已经在admin中的用户,但仍然有一些是我为测试而弥补的。对吗?此外,不幸的是,虽然我可以在初始迁移文件中看到电子邮件字段,但管理员中仍然缺少该字段。在上面添加了其他详细信息/问题(已在评论中)。
    DROP TABLE chishenma_app_category; COMMIT;
    
    list_display = ('user_wechat', 'user_city', 'user_waitlist_status', 'user_waitlist_num', 'user_num_referrals', 'user_email')