在模板 Django 中显示 get_context_data

时间:2021-03-11 07:50:47

标签: django orm

我正在尝试在模板上显示 get_context_data。我有一个模型类的方法,我需要从 ProfileView 调用它,它有两个不同的模型。对于 Profile View,我有 Profile Model,对于 shippingaddress 视图,我有 ShippingAddress Model。这些模型来自两个不同的应用程序。我尝试了下面的函数,它没有显示任何错误,但是当我尝试在模板中调用它时,它没有显示方法。

Views.py

class ProfileView(LoginRequiredMixin, DetailView):
    model = Profile
    template_name = "account/profile.html"
    success_url = "/"
    
    def get_context_data(self, *args, **kwargs):
        context = super(ProfileView, self).get_context_data(**kwargs)
        context['shipping'] = ShippingAddress.objects.filter(user=self.request.user)
        return context   

模板代码

{{object.get_full_address}}

模型.py

class ShippingAddress(models.Model):
    user = models.ForeignKey(settings.AUTH_USER_MODEL,
                             on_delete=models.CASCADE)
    phone_number = PhoneNumberField(null=True, blank=True)
    street_address = models.CharField(max_length=300)
    province = models.CharField(max_length=300)
    city = models.CharField(max_length=50)
    country = models.CharField(max_length=50)
    zip_code = models.CharField(max_length=10)
    
    def __str__(self):
        return str(self.user)
    
    def get_phone_number(self):
        return self.phone_number
    
    @property  
    def get_full_address(self):
        return f"{self.street_address}, {self.province}, {self.city}, {self.country}, {self.zip_code}"

1 个答案:

答案 0 :(得分:0)

objectDetailView 将添加到上下文的上下文变量。对于您的视图,这将是 Profile 的一个实例。您将一个查询集传递到名为 shipping 的上下文中,以便您可以遍历它:

{% for shipping_address in shipping %}
    {{ shipping_address.get_full_address }}
{% endfor %}
<块引用>

注意:您需要循环,因为根据您的型号,一个用户有多个送货地址。

<块引用>

注意:您也不需要覆盖 get_context_data,您可以简单地编写:

{% for shipping_address in request.user.shippingaddress_set %}
    {{ shipping_address.get_full_address }}
{% endfor %}

其中 shippingaddress_set 是与 _set 相关的型号名称 附加。您可以通过在您的 外键。

相关问题