python - 无法保存到具有多个表的 Django 中的外键字段中
问题描述
我正在开发一个项目人力资源管理系统。我有一个模型,其中包含办公室和员工的外键字段。我正在尝试使用外键办公室名称明智地将员工保存在用户和员工角色中。我的观点
def post(self, request):
if request.method != "POST":
messages.error(request, "Invalid Method ")
else:
first_name = request.POST.get('first_name')
last_name = request.POST.get('last_name')
username = request.POST.get('username')
email = request.POST.get('email')
password = request.POST.get('password')
address = request.POST.get('address')
phone = request.POST.get('phone')
image = "image"
office_id=request.POST.get("office")
office=Office.objects.get(id=office_id)
try:
user = CustomUser.objects.create_user(username=username, password=password, email=email, first_name=first_name, last_name=last_name, user_type=2)
user.staffs.address=address
user.staffs.phone=phone
user.staffs.image=image
user.staffs.office_id=office
user.save()
messages.success(request, "Staff Added Successfully!")
return render(request, 'admin_template/add_staff.html')
我的模型
class Staffs(models.Model):
id = models.AutoField(primary_key=True)
admin = models.OneToOneField(CustomUser, on_delete = models.CASCADE)
address = models.CharField(max_length=255, blank=True)
phone = models.CharField(blank=True,max_length=20)
image = models.ImageField(upload_to='uploads/user/',blank=True)
office_id = models.ForeignKey(Office,on_delete=models.DO_NOTHING)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
objects = models.Manager()
@receiver(post_save,sender=CustomUser)
def create_user_profile(sender, instance, created, **kwargs):
if created:
if instance.user_type == 1:
AdminHOD.objects.create(admin=instance)
if instance.user_type == 2:
Staffs.objects.create(admin=instance)
@receiver(post_save, sender=CustomUser)
def save_user_profile(sender, instance,**kwargs):
if instance.user_type == 1:
instance.adminhod.save()
if instance.user_type == 2:
instance.staffs.save()
解决方案
此代码在我的其他添加分支中工作
def post(self, request):
if request.method != "POST":
messages.error(request, "Invalid Method ")
else:
office_id = request.POST.get('company_name')
office=Office.objects.get(id=office_id)
branchName = request.POST.get('branch_name')
phone = request.POST.get('phone')
address = request.POST.get('address')
email = request.POST.get('email')
registrationNo = request.POST.get('registrationNo')
try:
branch = Branch(office_id=office, branchName=branchName, address=address, phone=phone, email=email)
branch.save()
messages.success(request, "Staff Added Successfully!")
return render(request, 'admin_template/add_branch.html')
except:
messages.error(request, "Failed to Add Staff!")
return render(request, 'admin_template/add_branch.html')
推荐阅读
- linux - linux何时刷新tcp发送缓冲区?
- hibernate - 休眠错误删除子记录Grails 4
- machine-learning - 机器学习分类器中的后处理
- python - 什么是基于字符串输入以不同模式执行 Python 函数的干净方法
- c# - 子列表上的 NHibernate 通配符可查询扩展
- javascript - 如何在页面刷新时使用 useSelector
- rest - 哪个 REST 命令用于从有效负载接收数据、对其进行操作并返回结果?
- visual-studio-code - 使用 vscode 比较两个项目
- python - Tkinter 将文本“实时”插入文本框
- maven - 面对 weblogic.application.ModuleException: null Caused By: java.lang.IllegalArgumentException