如何将链接添加到配置文件?Django 2.1.5版

2024-05-23 13:22:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我有网址,但它的工作与错误。 例如,链接必须是example/profile/3,但模板会重定向到example/profile/4。 用信号创建轮廓。我看,身份证用户和身份证档案没有匹配。也许吧,此错误。模板重定向到id为“User”的链接,而不是id为“Profile”的链接! 请帮帮我。你知道吗

型号.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()

管理员.py

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

电流网址.py

url(r'^profile/(?P<pk>\d+)$', views.ProfileDetailView.as_view(), name='profile-detail'),

发布_详细信息.html

{% extends "base_generic.html" %}
{% block content %}
<p><strong>Author:</strong> <a href="{% url 'profile-detail' post.user.pk %}">{{ post.user }}</a></p>
<p><strong>Description:</strong></p>
<p>{{ post.body|safe }}</p>
...

Tags: instancenamepyselfformurlreturnmodels
1条回答
网友
1楼 · 发布于 2024-05-23 13:22:57

我认为你需要做的改变很少,比如:

@receiver(post_save, sender=User)
def save_user_profile(sender, instance, **kwargs):
    instance.profile.save()

你不需要这个信号。因为用户和配置文件已经由OneToOne连接,它们是独立的实例。如果您更新user,那么您也不需要更新profile。你知道吗

另外,你的问题是,你被重定向到错误的配置文件。我认为问题是你通过url传递了错误的主键。您正在查找配置文件,但正在传递用户id。因此您需要这样更改:

<p><strong>Author:</strong> <a href="{% url 'profile-detail' post.user.profile.pk %}">{{ post.user }}</a></p>

您应该能够从user.profile访问profile。有关更多详细信息,请查看docs关于OneToOne字段。你知道吗

相关问题 更多 >