我正在使用默认的用户模型以及自定义的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)
答案 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)