不知道你的模型是如何設置太多。這可以幫助:
登錄形式:
from django import forms
class LoginForm(forms.Form):
username = forms.CharField(required = True)
password = forms.CharField(required = True)
你登錄查看:
from .forms import LoginForm
from django.contrib.auth import authenticate
def login_view(request):
if request.method == "POST":
login_form = LoginForm(request.POST)
if login_form.is_valid():
cleaned_username = login_form.cleaned_data["username"]
cleaned_password = login_form.cleaned_data["password"]
user = authenticate(username = cleaned_username, password = cleaned_password)
# It might be worth putting the form processing into a method of the login form.
if user:
login(user)
return redirect("url_for_my_company_page")
else:
pass # user failed auth, send message back to user
else:
pass # form not valid, handle errors
else:
login_form = LoginForm()
return render(request, "template.html", {"login_form":login_form}
現在,當用戶成功登錄,他們將被重定向到他們公司的網頁。這意味着當您使用request.user
時,您將獲得經過身份驗證的用戶。 (否則,我認爲它會返回一個'AnonymousUser')。
貴公司查看:
def my_company_view(request):
user_company = request.user.company
# here you can put in your new_employee form
# the user_company can now be used
return render(request, "template.html", {"company": user_company}
如果你正在使用你的新員工形式的模型的形式(models.ModelForm
),我想你可以通過構造函數添加變量到窗體:
class NewEmployeeForm(forms.ModelForm):
def __init__(self, company, *args, **kwargs):
self.company = company
super(NewEmployeeForm, self).__init__(*args, **kwargs)
self.fields['company'].initial = company
class Meta:
model = Employee
#fields...
def save(self):
Employee.objects.create(company = self.company)
如果您僅使用通用表格(forms.Form
),則只需使用user_company
變量即可設置員工的公司。
希望這會有所幫助!
我不太確定你的模型是如何設置的,但可能像'self.request.user.company.employee_set.all()'可能有幫助嗎?這將返回該用戶所屬公司的所有員工 – RHSmith159
這可能有助於https://simpleisbetterthancomplex.com/tutorial/2016/06/27/how-to-use-djangos-built-in-login-system。 html – mbieren
嗨@RHSmith,是的,我設法使用了Mozille Django教程中的類似方法,這樣我就可以查看來自用戶的所有連接到公司的員工。然而,我不確定如何使用新員工表單來確保公司只能被自動設置爲已登錄的用戶。 – Nowandthen98