我有一个包含基本Profile模型的Django应用程序,该模型使用OneToOneField扩展了User模型
class Profile(models.Model):
user = models.OneToOneField(
User,
on_delete=models.CASCADE,
)
这是/ updateProfile的网址格式
path('updateProfile/<pk>', views.UpdateProfileView.as_view(), name='update_profile'),
从网站的导航栏中调用的如下:
<a href="{% url 'update_profile' request.user %}">UpdateProfile</a>
我在forms.py中利用了ModelForm类,如下所示:
class update_profile_form(forms.ModelForm):
class Meta:
model = Profile
fields = ('phone_number', 'profile_picture')
然后在Views.py中调用以下基于UpdateView类的视图:
@method_decorator(login_required, 'dispatch')
class UpdateProfileView(UpdateView):
model = Profile
success_url = reverse_lazy('home')
form_class = update_profile_form
template_name = 'update_profile.html'
# this is where the error occurs
def get_queryset(self):
return Profile.objects.filter(user=self.request.user)
我的urls.py文件包含以下模式:
urlpatterns = [
path('', TemplateView.as_view(template_name='Login/home.html'), name='home'),
path('home/', TemplateView.as_view(template_name='Login/home.html'), name='home'),
path('updateProfile/<pk>', views.UpdateProfileView.as_view(), name='update_profile'),
]
我无法确定要在update_profile.html模板中使用哪种用户字段组合来呈现表单。
请帮助!谢谢
答案 0 :(得分:1)
在html中更改此行
<a href="{% url 'update_profile' request.user %}">UpdateProfile</a>
到
<a href="{% url 'update_profile' request.user.id %}">UpdateProfile</a>
与request.user returns user object
相同,但是url
有pk
,需要一个int
字段
答案 1 :(得分:0)
这是返回一个对象,以便出现问题
return Profile.objects.filter(user=self.request.user)
将此内容更改为
return Profile.objects.filter(user=self.request.user.pk)
答案 2 :(得分:0)
尝试一下
class UpdateProfileView(LoginRequiredMixin, UpdateView):
login_url = '/add login link/'
redirect_field_name = 'add login field'
model = Profile
success_url = reverse_lazy('home')
form_class = update_profile_form
template_name = 'update_profile.html'
# add post function if you have
在html中,
<a href="{% url 'update_profile' profile.user.pk %}">UpdateProfile</a>
在网址中
path('updateProfile/<int:pk>/', views.UpdateProfileView.as_view(), name='update_profile'),