简体   繁体   English

django 管理站点中没有电话号码记录

[英]No phone number record in django admin site

Currently on my own django project at the admin site, I can only see username, email , first name, last name and staff status.目前在管理站点的我自己的 Django 项目中,我只能看到用户名、电子邮件、名字、姓氏和员工状态。 The UserCreationForm I am using provided by django has a phone number text field that I included to let users key in their phone number, however, I cant seem to get the admin site to store the phone number record.我使用的 django 提供的UserCreationForm有一个电话号码文本字段,我将其包含在内以让用户输入他们的电话号码,但是,我似乎无法让管理站点存储电话号码记录。 Please tell me if there are any changes that should be made to my current code so that I can see the phone records.请告诉我是否应该对我当前的代码进行任何更改,以便我可以查看电话记录。

Wondering if there is anything that I should be including to my admin.py or forms.py.想知道是否应该在我的 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.

I expect to see the phone number records in django's admin site.我希望在 django 的管理站点中看到电话号码记录。

You do not appear to be saving your phone number to your database.您似乎没有将您的电话号码保存到您的数据库中。 You are merely collecting it.你只是在收集它。

  1. I would recommend not using an IntegerField for storing phone numbers unless you know that they will all be from the same area code.我建议不要使用IntegerField来存储电话号码,除非您知道它们都来自相同的区号。 The largest number an IntegerField can safely store is 214 748 3647. So it could only store phone numbers with area codes less than 214. IntegerField可以安全存储的最大数字是 214 748 3647。因此它只能存储区号小于 214 的电话号码。

  2. I assume that the phone number is being stored in your User model.我假设电话号码存储在您的User模型中。 You require something like this to replace your # do something with phone number??你需要这样的东西来代替你的# do something with phone number?? with something like this:像这样:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM