我有网址,但它有错误。例如,链接必须是 example/profile/3,但模板重定向到 example/profile/4。使用信号创建配置文件。我在看,id 用户和 id 配置文件不匹配。也许,这里有错误。模板重定向到 ID 为“用户”的链接,而不是 ID 为“个人资料”的链接!请帮助我。
模型.py
class Profile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
first_name = models.CharField(max_length=30, blank=True, default='')
last_name = models.CharField(max_length=30, blank=True, default='')
location = models.CharField(max_length=30, blank=True, default='')
#other fields
def get_absolute_url(self):
return reverse('profile-detail', args=[str(self.id)])
def __str__(self):
return self.user.username
class Post(models.Model):
user = models.ForeignKey(User, on_delete=models.SET_NULL, null=True)
#other fields
def __str__(self):
return self.title
def get_absolute_url(self):
return reverse('post-detail', kwargs={'pk': self.pk})
信号.py
@receiver(post_save, sender=User)
def create_user_profile(sender, instance, created, **kwargs):
if created:
Profile.objects.create(user=instance)
@receiver(post_save, sender=User)
def save_user_profile(sender, instance, **kwargs):
instance.profile.save()
管理文件
class ProfileAdmin(admin.ModelAdmin):
list_display = ('user', 'first_name', 'last_name', 'location', 'about_me', 'contacts')
admin.site.register(Profile, ProfileAdmin)
视图.py
class PostCreateView(FormView):
form_class = PostForm
template_name = 'post/post_form.html'
success_url = reverse_lazy('posts')
def form_valid(self, form):
response = super(PostCreateView, self).form_valid(form)
form.instance.user = self.request.user
form.save()
return response
class PostDetailView(generic.DetailView):
model = Post
相关分类