Я новичок в Django и все еще учусь, и сейчас я делаю LMS в Django, и у меня есть форма, которая подает заявление на отпуск с текущим вошедшим пользователем в качестве соискателя. Но я не понимаю, как я могу сделать это по умолчанию. Если я позволю пользователю сделать это, то желаемый результат будет достигнут, но я не хочу, чтобы пользователь видел поле.
Я пытался исключить и передать пользователя через представления, но не смог.
обновлен
Это ошибка
Cannot assign "<SimpleLazyObject: <User: superman>>": "Leave.employee_leaves" must be a "Employee" instance.
Django Version: 1.11.20
Exception Type: ValueError
Exception Value:
Cannot assign "<SimpleLazyObject: <User: superman>>": "Leave.employee_leaves" must be a "Employee" instance.
Exception Location: C:\Python27\lib\site-packages\django\db\models\fields\related_descriptors.py in __set__, line 216
Python Executable: C:\Python27\python.exe
Python Version: 2.7.16
Python Path:
['C:\\Users\\User\\Desktop\\Intern Work\\LMS\\LMS',
'C:\\Python27\\python27.zip',
'C:\\Python27\\DLLs',
'C:\\Python27\\lib',
'C:\\Python27\\lib\\plat-win',
'C:\\Python27\\lib\\lib-tk',
'C:\\Python27',
'C:\\Users\\Bitswits 3\\AppData\\Roaming\\Python\\Python27\\site-packages',
'C:\\Python27\\lib\\site-packages']
Server time: Fri, 17 May 2019 10:02:36 +0000
**traceback**
Internal Server Error: /request/
Traceback (most recent call last):
File "C:\Python27\lib\site-packages\django\core\handlers\exception.py", line 41, in inner
response = get_response(request)
forms.py
from .models import Employee, Leave
from django import forms
from django.contrib.auth.models import User
from django.contrib.auth.forms import UserCreationForm, UserChangeForm
class Leave_Form(forms.ModelForm):
class Meta:
model = Leave
fields = ['leave_Type', 'employee_leaves']
# exclude = ['employee_leaves']
leave_type_choice = (
("Annual leave", "Annual leave"),
("Sick leave", "Sick leave"),
("Casual leave", "Casual leave"),
("Emergency leave", "Emergency leave"),)
widgets = {
'leave_Type': forms.Select(choices=leave_type_choice, attrs={'class': 'form-control'}), }
class RegistrationForm(UserCreationForm):
email = forms.EmailField(required=True)
class Meta:
model = User
fields = [
'username',
'first_name',
'last_name',
'email',
'password1',
'password2'
]
def save(self, commit=True):
user = super(RegistrationForm, self).save(commit=False)
user.first_name = self.cleaned_data['first_name']
user.last_name = self.cleaned_data['last_name']
user.email = self.cleaned_data['email']
if commit:
user.save()
return user
class userReg_Form(forms.ModelForm):
class Meta:
model = Employee
exclude = ['employee_name']
fields = [
'employee_designation', 'employee_department', ]
employee_department_type = (
("Admin", "Admin"),
("Finance", "Finance"),
("General Staff", "General Staff"),
("H.R", "H.R"),
("I.T", "I.T"),
("Software Development", "Software Development"), )
widgets={
'employee_department': forms.Select(choices=employee_department_type, attrs={'class': 'form-control'}), }
models.py
from __future__ import unicode_literals
from django.db import models
from django.contrib.auth.models import User
class Employee(models.Model):
employee_name = models.OneToOneField(User, on_delete = models.CASCADE)
employee_designation = models.CharField(max_length = 10)
employee_department = models.CharField(max_length = 35)
def __str__(self):
return self.employee_department + " " + " " + str(self.employee_name.username) + " " + " " + " ID: " + str(self.pk)
class Meta:
verbose_name_plural = "Employee"
class Leave(models.Model):
#This class will connect the user with the leave types etc and other classes data
employee_leaves = models.ForeignKey(
Employee, on_delete=models.CASCADE)
leave_Type = models.CharField(max_length=25)
class Meta:
verbose_name_plural = "Leave"
def __str__(self):
return self.leave_Type + " by " + str(self.employee_leaves)
views.py
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from .forms import Leave_Form, RegistrationForm, userReg_Form # Form Name
from . models import *
from django.shortcuts import render, redirect, render_to_response
from django.contrib import messages
from django.contrib.auth import login, logout, authenticate, update_session_auth_hash
from django.contrib.auth.forms import PasswordChangeForm, UserCreationForm
from django.http import HttpResponseRedirect, JsonResponse
from django.contrib.auth.decorators import login_required
from django.contrib.auth.models import User
from django.utils.translation import ugettext as _
def home(request): # To view contents of the home page
return render(request, "projectfiles/HomePage.html")
The form view
#Requesting leave
@login_required(login_url='LoginPage')
def request_leave(request):
form = Leave_Form(request.POST or None)
if form.is_valid():
# abc = form.save(commit=False)
# abc.employee_leaves = request.user
# abc.save()
form.save()
context = {'form': form}
# messages.success(request, ('Submitted for review!'))
# return HttpResponseRedirect('Home-Page')
return render(request, 'projectfiles/reqleave.html', context)
#shows the signed up users to the admin
@login_required(login_url='LoginPage')
def showusers(request):
users = User.objects.all()
context={'users':users}
return render(request, 'projectfiles/showusers.html', context)
#User password change
@login_required(login_url='LoginPage')
def change_password(request):
if request.method == 'POST':
form = PasswordChangeForm(request.user, request.POST)
if form.is_valid():
user = form.save()
update_session_auth_hash(request, user)
messages.success(request,('Password updated!'))
return redirect('Home-Page')
else:
messages.error(request,('Please correct the error below.'))
else:
form = PasswordChangeForm(request.user)
return render(request, 'projectfiles/change_password.html', {'form': form})
#User registration with dept and designation
def reg_user(request):
form = RegistrationForm(request.POST)
form2 = userReg_Form(request.POST)
if request.method == 'POST':
if form.is_valid() and form2.is_valid():
user = form.save()
profile = form2.save(commit=False)
profile.employee_name = user
profile.save()
return redirect('Home-Page')
else:
form = RegistrationForm()
form2 = userReg_Form()
context = {'form': form, 'form2': form2}
return render(request, 'projectfiles/reg.html', context)
reqleave.html
{% include 'projectfiles/base.html' %}
<title>Request Leave</title>`
{% block asd %}
<br><br>
<div class="container" align="center">
<form method="POST" style="width:190px">
{% csrf_token %}
{{form.as_p}}
<button class="btn btn-success my-2 my-sm-0" type="submit">Apply</button>
</form></div>
{% endblock %}
Я ожидаю, что пользователь увидит раскрывающийся список типа отпуска и отправит его на утверждение, не видя никаких полей, связанных с выбором пользователя и т. Д.