【问题标题】:No phone number record in django admin sitedjango 管理站点中没有电话号码记录
【发布时间】:2020-01-18 00:02:01
【问题描述】:

目前在管理站点上我自己的 django 项目中,我只能看到用户名、电子邮件、名字、姓氏和员工状态。我正在使用的 django 提供的UserCreationForm 有一个电话号码文本字段,我包含该字段以让用户输入他们的电话号码,但是,我似乎无法让管理站点存储电话号码记录。请告诉我是否应该对我当前的代码进行任何更改,以便我可以查看电话记录。

想知道我是否应该在我的 admin.py 或 forms.py 中包含任何内容。

/* forms.py */
from django import forms
from django.contrib.auth.models import User
from django.contrib.auth.forms import UserCreationForm
from validate_email import validate_email


class UserRegisterForm(UserCreationForm):
    email = forms.EmailField()
    phone_number = forms.IntegerField(required=True)

    class Meta:
        model = User
        fields = ['username', 'email']

    def clean_email(self):
        email = self.cleaned_data.get("email")
        if not validate_email(email, verify=True):
            raise forms.ValidationError("Invalid email")
        return email

/* views.py */
from django.shortcuts import render, redirect
from django.contrib import messages
from .forms import UserRegisterForm


def register(request):
    if request.method == 'POST':
        form = UserRegisterForm(request.POST)
        if form.is_valid():
            user = form.save()
            phone_number = form.cleaned_data['phone']
            # do something with phone number??
            username = form.cleaned_data.get('username')
            messages.success(request, f'Account created for {username}!')
            return redirect('blog-home')
    else:
        form = UserRegisterForm()
    return render(request, 'users/register.html', {'form': form})

/* admin.py */
from django.contrib import admin

# Register your models here.

我希望在 django 的管理站点中看到电话号码记录。

【问题讨论】:

    标签: python django django-admin django-registration


    【解决方案1】:

    您似乎没有将电话号码保存到数据库中。你只是在收集它。

    1. 我建议不要使用IntegerField 来存储电话号码,除非您知道它们都来自同一个区号。 IntegerField可以安全存储的最大号码是214 748 3647。所以它只能存储区号小于214的电话号码。

    2. 我假设电话号码存储在您的User 模型中。你需要这样的东西来用这样的东西替换你的# do something with phone number??

    user = form.save()
    user.refresh_from_db()
    phone =form.cleaned_data.get('phone_number')
    user.profile.phone_number = phone
    user.save()
    

    【讨论】:

    • 我已经根据您建议的代码编辑了views.py,但是当我输入提交时,它仍然在user.profiles.phone_number = phone中声明属性错误配置文件
    • 您的电话号码存储模式是什么?您应该使用 user.whateveryourmodelis.phone_number。
    • 默认的user 没有电话号码的位置。
    猜你喜欢
    • 1970-01-01
    • 2014-03-30
    • 2016-02-25
    • 1970-01-01
    • 1970-01-01
    • 2011-01-17
    • 2018-10-09
    • 1970-01-01
    • 2019-05-06
    相关资源
    最近更新 更多