簡體   English   中英

如何添加鏈接到個人資料? 的Django 2.1.5

[英]How add link to profile? Django 2.1.5

我有網址,但是它有錯誤。 例如,鏈接必須是example / profile / 3,但是模板重定向到example / profile / 4。 使用信號創建配置文件。 我看到ID用戶名和ID個人資料不匹配。也許是錯誤的。 模板重定向到ID為“ User”的鏈接,而不是ID為“ Profile”的鏈接! 請幫助我。

models.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})

signals.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()

admin.py

class ProfileAdmin(admin.ModelAdmin):
    list_display = ('user', 'first_name', 'last_name', 'location', 'about_me', 'contacts')

admin.site.register(Profile, ProfileAdmin)

views.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

當前的urls.py

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

post_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>
...

我認為您需要做的更改很少,例如:

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

您不需要此信號。 由於User和Profile已通過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 有關更多詳細信息,請檢查有關OneToOne字段的文檔

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM