我正在尝试在模板上显示 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}"
答案 0 :(得分:0)
object
是 DetailView
将添加到上下文的上下文变量。对于您的视图,这将是 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
相关的型号名称
附加。您可以通过在您的
外键。