允许用户编辑自己的个人资料模型',该模型与用户模型

时间:2017-11-02 20:13:15

标签: python django

我正在使用默认的用户模型以及自定义的AgentBasicInfo'个人资料模型'以及有关用户的其他信息。

我试图让每个用户都能够编辑他的个人资料模型,而只能编辑自己的个人资料。我正在使用generic.edit UpdateView。

我很困惑我如何处理这个问题。我尝试了一些但得到了错误,主要是NoReverseMatch。请参阅下面的代码:

views.py

class EditBasicInfo(LoginRequiredMixin, UpdateView):
    model = AgentBasicInfo
    form_class = AgentBasicInfoForm

    # the user want to edit this post must be owner this post
    def get_queryset(self):
        post_qs = super(EditBasicInfo, self).get_queryset()
        return post_qs.filter(user=self.request.user)

models.py

class AgentBasicInfo(models.Model):

    user = models.OneToOneField(User, on_delete=models.CASCADE)
    user_first_name = models.CharField(max_length=30)
    user_last_name = models.CharField(max_length=30)
    preferred_email = models.EmailField()
    office_phone_number = models.CharField(max_length=10)
    brokerage_of_agent = models.CharField(max_length=50)

    def __str__(self):
        return self.user_last_name

urls.py

url(r'^edit_base_info/(?P<pk>\d+)/$', views.EditBasicInfo.as_view(), name='edit_base_info'),

HTML网址标记

{% url 'edit_base_info' agentbasicinfo.id %}

我需要一些关于如何实现这一目标的指导。谢谢!

更新了views.py

class EditBasicInfo(LoginRequiredMixin, UpdateView):
    model = AgentBasicInfo
    form_class = AgentBasicInfoForm

    # the user want to edit this post must be owner this post
    def get_object(self):
        return self.get_queryset().get(user=self.request.user)

1 个答案:

答案 0 :(得分:2)

如果用户只能编辑自己的个人资料,则可以为每个人使用相同的网址。

url(r'^edit_base_info/$', views.EditBasicInfo.as_view(), name='edit_base_info')

然后您不需要将额外的参数传递给{% url %}。 (我假设你没有使用namespaced urls

{% url 'edit_base_info' %}

您应该覆盖get_queryset以获取特定的个人资料实例,而不是覆盖get_object

get_object(self):
    return self.get_queryset().get(user=self.request.user)