创建多个模型以扩展Django用户

时间:2017-06-23 23:34:18

标签: django

如何将多个django模型链接到django应用程序的经过身份验证的用户。如果我想显示链接到用户的这些模型的信息,我的view.py和html模板将如何显示。在此先感谢。

以下是我的代码

class UserProfile(models.Model):
     user = models.OneToOneField(User,on_delete=models.CASCADE,related_name="userprofile")
     experience= model.TextField(max_Length=500,null=True,blank=False)
     def __str__(self):
         return self.user.username
@receiver(post_save,sender=User)
def create_profile(sender,instance,created,**kwargs):
     if created:
        UserProfile.objects.create(user=instance)
post_save.connect(create_profile,sender=User)

现在是我遇到问题的第二个模型

class UserProfileDp(models.Model):
  user = models.OneToOneField(User,on_delete=models.CASCADE,related_name="userprofiledp")
  profile_dp = models.ImageField(upload_to="profile_image" ,null= True,blank=True)
   def __str__(self):
       return self.profile_dp
@receiver(post_save,sender=User)
def create_profile(sender,instance,created,**kwargs):
if created:
    UserProfileDp.objects.create(user=instance)
post_save.connect(create_profile,sender=User)

第一个模型的表单视图非常好,没有任何问题。但是我   在为第二个模型创建表单视图时出错   这是我的第二个模型的view.py代码

def user_profile_pic(request):
if request.method == 'POST':

    profile_form = User_dp_form(request.POST,request.FILES,instance=request.user.userprofiledp)
    if  profile_form.is_valid():

        profile_form.save()
        messages.success(request,'Your Profile has been Updated')
        return redirect('success:profile_account')
    else:
        messages.error(request,'fill out the fields correctly')
else:

     profile_form = ProfileForm(instance=request.user.userprofiledp)
return render(request,"success/user_account/edit_profile.html",{'profile_form':profile_form})

错误

/ user_profile_pic /

中的RelatedObjectDoesNotExist

用户没有userprofiledp。

1 个答案:

答案 0 :(得分:1)

与链接一个相同的方式。不要过分思考它。

两者都需要OneToOneField给用户和相关名称。视图和html中没有什么特别之处。您只需从用户模型中引用它们,就像从一个配置文件模型引用字段一样。