我觉得很难将用户模型和用户配置文件模型分开以生成两个单独的视图和应用程序。 它适用于用户,但不适用于用户配置文件,我将userchangeform与user一起使用,并将form.modelforms与UserProfile一起使用。我正在尝试使用updateview,以便用户可以查看和更新他的信息。 代码:
#user profile models file
from django.db import models
from easyinstall import settings
class UserProfile(models.Model):
user = models.OneToOneField(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
picture = models.ImageField(upload_to='uploads/profile_images', blank=True)
bio = models.TextField(max_length=500, blank=True)
location = models.CharField(max_length=30, blank=True)
birth_date = models.DateField(null=True, blank=True)
website = models.URLField(blank=True)
timestamp = models.DateTimeField(auto_now_add=True)
updated = models.DateTimeField(auto_now=True)
class Meta:
verbose_name_plural = 'users profiles'
def __str__(self):
return self.user.username
用户个人资料表格
from django import forms
from .models import UserProfile
class EditProfileForm(forms.ModelForm):
class Meta:
model = UserProfile
fields = ('picture', 'bio', 'location', 'birth_date', 'website',)
用户个人资料视图
from .models import UserProfile
from django.views.generic import UpdateView
from django.urls import reverse_lazy
from .forms import EditProfileForm
class ProfileUpdateView(UpdateView):
model = UserProfile
form_class = EditProfileForm
template_name = 'profiles/profileupdate.html'
success_urls = reverse_lazy('profiles')
pk_url_kwarg = 'UserProfile_pk'
context_object_name = 'UserProfile'
我真的很喜欢“ pk”这个东西,如何获取用户资料的pk并使用它?在个人资料表中包含id和user_id可以吗?
请仔细检查模板:
{% load socialaccount %}
<h1>Django Allauth Tutorial</h1>
{% if user.is_authenticated %}
<p>Welcome {{ user.username }} !!!</p>
<li><a href="{% url 'settings' %}">change settings</a></li>
<li><a href="{% url 'profile_update' UserProfile_pk=user.pk %}">Edit Profile</a></li>
{% else %}
{% csrf_token %}
<ul>
<li><a href="{% provider_login_url 'linkedin' %}">Sign Up</a></li>
</ul>
{% endif %}
和网址:
from django.urls import path
from .views import UsersList, ProfileUpdateView
urlpatterns = [
path('', UsersList.as_view(), name='profiles'),
path('profile/(?P<UserProfile_pk>\d+)/edit/', ProfileUpdateView.as_view(), name='profile_update'),
]
我正在使用django 2.1,python3。
谢谢
答案 0 :(得分:0)
您需要使用个人资料的pk(而不是用户)链接到编辑视图。
{% url 'profile_update' UserProfile_pk=user.userprofile.pk %}