Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.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 ModelForm基于最后一个条目为表中的条目添加主ID';s主ID_Django_Django Models_Django Forms_Django Class Based Views - Fatal编程技术网

Django ModelForm基于最后一个条目为表中的条目添加主ID';s主ID

Django ModelForm基于最后一个条目为表中的条目添加主ID';s主ID,django,django-models,django-forms,django-class-based-views,Django,Django Models,Django Forms,Django Class Based Views,我正在创建一个注册系统。我使用django的默认用户模型来存储用户详细信息,并将其对象传递到名为“Employee”的模型中,在该模型中存储他们的部门、经理和其他信息。这是我的 models.py: from django.contrib.auth.models import User class Employee(models.Model): user = models.OneToOneField(User, on_delete=models.CASCADE, related_nam

我正在创建一个注册系统。我使用django的默认用户模型来存储用户详细信息,并将其对象传递到名为“Employee”的模型中,在该模型中存储他们的部门、经理和其他信息。这是我的

models.py:

from django.contrib.auth.models import User

class Employee(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE, related_name='user')
....
forms.py:

from users.models import Employee
from django.contrib.auth.models import User
from django.forms import ModelForm
from django.contrib.auth.forms import UserCreationForm


class AddNewUserForm(UserCreationForm):

    class Meta:
        model = User
        fields = ('username', 'first_name', 'last_name', 'email', 'password1', 'password2')


class AddNewEmployeeForm(ModelForm):

    class Meta:
        model = Employee
        fields = {'department', 'manager', 'total_leaves'}
添加\u new\u user.html:

<form method="POST">
    {% csrf_token %}
    {{ form_user.as_p }}
    {{ form_emp.as_p }}

       <div class="text-center">
          <button type="submit" class="btn btn-success">Submit</button>
       </div>
  </form>
问题是,当post方法运行时,它试图从一开始就将条目添加到
Employee
表中;假设其中没有条目。但我在该表中有条目,我得到以下错误:

重复键值违反唯一约束“用户\员工\ pkey” 详细信息:键(id)=(6)已存在


它给了我这个错误,因为我的表中已经有6个用户了。在此之后,当我第七次尝试使用此表单创建用户时,它起作用了。是否有办法查看表中已有多少个条目,并自动将其递增1以避免此错误?非常感谢您的帮助。

您可以手动设置自己的主键字段

class Employee(models.Model):
    employee_id = models.IntegerField(primary_key=True)
然后,您可以在保存过程中计算并设置主键。只需获取具有max.employee_id的条目,并将其递增1。例如:

from django.db.models import Max

# double underscores in employee_id__max
max_employee_id = Employee.objects.all().aggregate(Max('employee_id'))['employee_id__max']

这是有道理的。我会尝试一下,但我有一个问题。django不是默认强制主键吗?没关系,我明白你的意思。我不知道为什么我以前没有想到它。非常感谢你!很高兴我能帮助你!为了完整性,如果有人遇到同样的问题。您可以通过将关键字arg primary\u key=True添加到字段中来创建自己的主键字段。如果添加自己的主键字段,则不会添加自动主键字段
from django.db.models import Max

# double underscores in employee_id__max
max_employee_id = Employee.objects.all().aggregate(Max('employee_id'))['employee_id__max']