在 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.idmyuser.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})