在 Django 中创建自动递增整数字段
create auto increment integer field in django
我想创建自动递增整数字段。我想为每个用户创建一个 ID。
我是初学者,请完整清楚地解释:)
我想为每个用户自动分配一个ID。
我的模特:
from django.db import models
class User_account(models.Model):
email = models.EmailField()
fullname = models.CharField(max_length=30)
username = models.CharField(max_length=20)
password = models.CharField(max_length=30)
marital_status = models.BooleanField(default=False)
bio = models.CharField(default='' ,max_length=200)
def __str__(self):
return f"(@{self.username}) {self.fullname}"
def save(self, *args, **kwargs):
self.username = self.username.lower()
self.email = self.email.lower()
return super(User_account, self).save(*args, **kwargs)
我的看法:
from django.shortcuts import render
from .models import User_account
def profile(request, username):
users = User_account.objects.all()
for user in users:
if username == user.username:
return render(request, 'account_app/profile.html', context={"user_info":user})
def users_list(request):
users = User_account.objects.all()
return render(request, 'account_app/users_list.html', context={"user_info":users})
您没有使用 primary_key=True
[Django-doc] 指定字段,这意味着 Django 将自动 添加一个名为 id
.[=23 的字段到您的模型中=]
如果您不更改 DEFAULT_AUTO_FIELD
setting [Django-doc], or set the default_auto_field
attribute [Django-doc] of the AppConfig
of your app, it will use an AutoField
[Django-doc] 这是一个 IntegerField
将自动添加一个值。因此,您可以使用 myuser.id
或 myuser.pk
.
访问它
请不要使用循环过滤username
,这将导致线性搜索Django/Python层。最好过滤数据库:
from django.shortcuts import <strong>get_object_or_404</strong>
def profile(request, username):
user = get_object_or_404(User_account<strong>, username=username</strong>)
return render(request, 'account_app/profile.html', context={'user_info': user})
我想创建自动递增整数字段。我想为每个用户创建一个 ID。 我是初学者,请完整清楚地解释:) 我想为每个用户自动分配一个ID。
我的模特:
from django.db import models
class User_account(models.Model):
email = models.EmailField()
fullname = models.CharField(max_length=30)
username = models.CharField(max_length=20)
password = models.CharField(max_length=30)
marital_status = models.BooleanField(default=False)
bio = models.CharField(default='' ,max_length=200)
def __str__(self):
return f"(@{self.username}) {self.fullname}"
def save(self, *args, **kwargs):
self.username = self.username.lower()
self.email = self.email.lower()
return super(User_account, self).save(*args, **kwargs)
我的看法:
from django.shortcuts import render
from .models import User_account
def profile(request, username):
users = User_account.objects.all()
for user in users:
if username == user.username:
return render(request, 'account_app/profile.html', context={"user_info":user})
def users_list(request):
users = User_account.objects.all()
return render(request, 'account_app/users_list.html', context={"user_info":users})
您没有使用 primary_key=True
[Django-doc] 指定字段,这意味着 Django 将自动 添加一个名为 id
.[=23 的字段到您的模型中=]
如果您不更改 DEFAULT_AUTO_FIELD
setting [Django-doc], or set the default_auto_field
attribute [Django-doc] of the AppConfig
of your app, it will use an AutoField
[Django-doc] 这是一个 IntegerField
将自动添加一个值。因此,您可以使用 myuser.id
或 myuser.pk
.
请不要使用循环过滤username
,这将导致线性搜索Django/Python层。最好过滤数据库:
from django.shortcuts import <strong>get_object_or_404</strong>
def profile(request, username):
user = get_object_or_404(User_account<strong>, username=username</strong>)
return render(request, 'account_app/profile.html', context={'user_info': user})