簡體   English   中英

我想在相關用戶的個人資料中使用Django中的模板標簽顯示用戶的產品

[英]I want show user's products in related user's profile with template tags in Django

我使用view.py(出生日期等)呈現用戶的個人資料頁面。 但是我應該顯示有關個人資料頁面所有者的產品(個人資料所有者的產品)。 我建立了自定義用戶模型,但是無法在此模型中添加相關產品。

models.py

class Profile(models.Model):
        user = models.OneToOneField(User, on_delete=models.CASCADE)
        slug = models.SlugField(max_length=55, blank=True, null=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)
        avatar = models.ImageField(upload_to='avatars/', null=True, blank=True)
        products = models.ManyToManyField(Product, blank=True, related_name="Products")
        followers = models.ManyToManyField(User, null=True, blank=True, verbose_name="Followers", related_name="Followers")
        country = models.CharField(max_length=30, blank=True)
        job = models.CharField(max_length=30, blank=True)

        def save(self, *args, **kwargs):
            print(self.user.username)

            if not self.slug:
                self.slug = self.get_slug()
                print(self.slug)
            print(self.user.username)
            super(Profile, self).save(*args, **kwargs)

        def __str__(self):
            return "{username}".format(username=self.user.username)

        def get_slug(self):
            slug = self.user.username.replace("ı", "i")
            return slugify(slug)


    @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()

views.py

@login_required
    def profile(request, slug):
        #  detail = Profile.objects.filter(id=id)
        #  profile_detail = Profile.objects.filter(slug=slug)
        profile_detail = get_object_or_404(Profile, slug=slug)
        context = {
            "profile_detail": profile_detail
        }
        return render(request, "profile_pages/profile.html", context)

user_template_tags.py

@register.simple_tag
def user_products(request):
    user = #  Profile page owner's username (HOW?)
    products = Product.objects.filter(seller=user)

    return products

urls.py

urlpatterns = [
    path('sign_up/', views.sign_up, name="sign_up"),
    path('login/', views.login_user, name="login"),
    path('logout/', views.logout_user, name="logout"),
    path('reset_password/', views.send_reset_link, name="reset_password"),
    path('create_new_password/', views.create_new_password, name="create_new_password"),
    path('profile/<slug:slug>/', views.profile, name="profile"),

正如我在評論中所說,您的過濾器毫無意義; 您不需要它。

您正在將配置文件作為profile_detail發送到模板。 因此,您可以使用它:

{% for product in profile_detail.products.all %}
    {{ product.name }} # or whatever
{% endfor %}

暫無
暫無

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

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