Я хочу прикрепить свою форму с текущим вошедшим пользователем как заявителем - PullRequest
0 голосов
/ 16 мая 2019

Я новичок в 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 %}

Я ожидаю, что пользователь увидит раскрывающийся список типа отпуска и отправит его на утверждение, не видя никаких полей, связанных с выбором пользователя и т. Д.

1 Ответ

0 голосов
/ 17 мая 2019

Ваша модель имеет ForeignKey для Сотрудника, а не Пользователя. request.user - это Пользователь, который сам имеет личные отношения с Сотрудником. Вы должны следовать этим отношениям:

abc.employee_leaves = request.user.employee
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...