【发布时间】:2020-10-10 14:32:13
【问题描述】:
我有两个表单(OwnerCreateForm、EmployeesCreateForm)和 3 个模型(Profile、Company)。当所有者注册时,他创建了公司和他自己的用户对象。所有者登录后,他可以创建员工。我需要将业主公司与员工联系起来。 这是我正在使用的模型:
class Company(models.Model):
company_name = models.CharField(max_length=100, unique=True)
address = models.CharField(max_length=100)
def __str__(self):
return self.company_name
class Profile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
image = models.ImageField(default='default.jpg', upload_to='profile_pics')
company = models.ForeignKey(Company, on_delete=models.CASCADE)
is_owner = models.BooleanField(default=False)
is_admin = models.BooleanField(default=False)
is_manager = models.BooleanField(default=False)
is_systemAdmin = models.BooleanField(default=False)
def __str__(self):
return '{} Profile'.format(self.user.username)
这里是表格:
from django.contrib.auth.forms import UserCreationForm
from .models import Company
from django import forms
class CompanyForm(forms.ModelForm):
class Meta:
model = Company
fields = ('company_name', 'address')
class OwnerCreateForm(UserCreationForm):
class Meta:
fields = ('username', 'first_name', 'last_name', 'email', 'password1', 'password2')
model = get_user_model()
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.fields['username'].label = 'Display Name'
self.fields['email'].label = "Email Address"
class EmployeesCreateForm(UserCreationForm):
is_admin = forms.BooleanField(required=False)
is_manager = forms.BooleanField(required=False)
is_systemAdmin = forms.BooleanField(required=False)
class Meta:
fields = ('username', 'first_name', 'last_name', 'email', 'password1', 'password2')
model = get_user_model()
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.fields['username'].label = 'Display Name'
self.fields['email'].label = "Email Address"
这是我的看法:
from django.shortcuts import render, redirect
from .forms import OwnerCreateForm, EmployeesCreateForm, CompanyForm
from .models import Profile
from django.contrib import messages
from django.contrib.auth.decorators import login_required
from .models import Profile,User
def create_profile_for_employee(form, company=None, is_owner = False):
profile = Profile()
username_employee = User(username=form.cleaned_data.get('username'))
profile.company = username_employee.profile.company.pk
profile.is_owner = form.cleaned_data.get('is_owner', False)
profile.is_admin = form.cleaned_data.get('is_admin', False)
profile.is_manager = form.cleaned_data.get('is_manager', False)
profile.is_systemAdmin = form.cleaned_data.get('is_systemAdmin', False)
def registration_owner(request):
if request.method == "POST":
form = OwnerCreateForm(request.POST)
company = CompanyForm(request.POST)
if form.is_valid() and company.is_valid():
company.save()
form.save()
messages.success(request, f'Your Account has been Created! You are now able to log in')
return redirect("accounts:login")
else:
form = OwnerCreateForm()
company = CompanyForm()
context = {
'title': 'Sign up Owner',
'form': form,
'company': company
}
return render(request, "accounts/signup.html", context)
@login_required()
def registration_employees(request):
if request.method == "POST":
form = EmployeesCreateForm(request.POST)
if form.is_valid():
form.save()
create_profile_for_employee(form)
messages.success(request, f'Your Account has been Created! You are now able to log in')
return redirect("accounts:login")
else:
form = EmployeesCreateForm()
context = {
'title': 'Sign up Employees',
'form': form,
}
return render(request, "accounts/signup.html", context)
@login_required()
def profile_view(request):
return render(request, "accounts/profile.html")
正如您在 create_profile_for_employee() 中看到的,我正在尝试手动创建员工的个人资料,但我无法访问所有者公司。 任何帮助将不胜感激,谢谢,最好的
请注意,目前我以所有者身份登录。因为只有所有者才能创建员工用户。
【问题讨论】:
标签: django django-models django-forms django-views