我可以使用注册字段制作包含不同字段的表单吗?

时间:2018-06-11 13:41:36

标签: python django

models.py

class employeeModel(models.Model):
    employee_id = models.CharField(max_length=300,unique=True,help_text='Employee ID should not be same')
    name = models.CharField(max_length=300)
    father_name = models.CharField(max_length=300)
    username = models.CharField(max_length=50,null=True,blank=True)
    email = models.EmailField(null=True,blank=True)
    password = models.CharField(max_length=20,null=True,blank=True)


    def get_absolute_url(self):
        return reverse('detail_view',kwargs={'employee_id':self.employee_id})

    def __str__(self):
        return self.employee_id
    class Meta:
        verbose_name = 'Employee Detail'

views.py

User = get_user_model()
def create_view(request):
    if request.method == 'POST':
        form = employeeForm(request.POST or None,request.FILES or None)
        if form.is_valid():

            username = form.cleaned_data['username']
            email = form.cleaned_data['email']
            password = form.cleaned_data['password']
            User= get_user_model()
            user=
                 User.objects.create_user(
                  username=username,email=email,password=password
                    )
            authenticate(
            request,username=username,email=email,password=password
            )
            user.save()
            form.save()


            return redirect('emp_list')
    else:
        form = employeeForm()
    return render(request,'create_employee.html',{'form':form})

虽然它没有引发任何错误,但用户无法通过此方法创建实例,但是在UsereeModel.objects.all()中显示的“用户对象”不在User.objects.all()中。这就是为什么我创建任何用户虽然这个表单登录失败导致他们不是用户的对象。

我能做些什么让它发挥作用?或者我必须丢弃此代码?

2 个答案:

答案 0 :(得分:1)

models.py

class employeeModel(models.Model):    
    def __init__(self, employee_id, name, father_name, username, email, password):
        self.employee_id = models.CharField(max_length=300,unique=True,help_text='Employee ID should not be same')
        self.name = models.CharField(max_length=300)
        self.father_name = models.CharField(max_length=300)
        self.username = models.CharField(max_length=50,null=True,blank=True)
        self.email = models.EmailField(null=True,blank=True)
        self.password = models.CharField(max_length=20,null=True,blank=True)
    def __repr__(self):
        return "Employee: {}".format(self.name)

我的建议:尝试上面的员工类的init方法。

答案 1 :(得分:1)

@ChidanandaNayak,是的,虽然不确定您打算如何使用employeeModel类来创建用户,但请确保该类中传递的所有参数都等于init方法中定义的参数数量。

实施例

id = 123
name = 'John Doe'
father_name = 'Patrick Doe'
username = 'john_doe'
email = 'john_doe@demo.com'
password = '1234567890'
new_user = employeeModel(id, name, father_name, email, password)