繁体   English   中英

无法保存到具有多个表的 Django 中的外键字段

[英]Unable to save into Foreign key fields in Django with multiple table

我正在开发一个项目人力资源管理系统。 我有一个 model 与办公室和员工的外键字段。 我正在尝试使用外键办公室名称明智地将员工保存在用户和员工角色中。 我的观点

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')
  1. 我们可以从模型中删除 (id),因为它是自动实现的
  2. office = models.ForeignKey(Office,on_delete=models.DO_NOTHING)
  3. 像这样将用户员工办公室分配到办公室
user.staffs.office = office

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM