如何显示与特定用户有关的信息

时间:2020-10-09 00:41:18

标签: django django-models django-views django-templates

我有这个模型

class ShippingAddress(models.Model):
    customer = models.ForeignKey(Customer, on_delete=models.SET_NULL, null=True)
    order = models.ForeignKey(Order, on_delete=models.SET_NULL, null=True)
    address = models.CharField(max_length=200, null=False)
    city = models.CharField(max_length=200, null=False)
    state = models.CharField(max_length=200, null=False)
    zipcode = models.CharField(max_length=200, null=False)
    date_added = models.DateTimeField(auto_now_add=True)

和此视图

def view_profile(request):
    data = cartData(request)
    cartItems = data['cartItems']
    shippingAddress = ShippingAddress.objects.all()
    args = {'user': request.user, 'cartItems': cartItems, 'shippingAddress': shippingAddress}
    return render(request, 'store/profile.html', args)

模板

{% for sa in shippingAddress %}
        <p>address: {{ sa.address }}</p>
        <p>city: {{ sa.city }}</p>
        <p>state: {{ sa.state }}</p>
        <p>zipcode: {{ sa.zipcode }}</p>


        {% endfor %}`enter code here`

问题是模板显示数据库中的所有收货地址,我只希望它显示与已登录用户

相关的收货地址

谢谢

1 个答案:

答案 0 :(得分:0)

您需要先查询客户模型:

active_customer = Customer.objects.get(name=request.user)

接下来,您需要在“ ShippingAddress”模型中设置反向关系,类似于:

customer = models.ForeignKey(Customer, on_delete=models.SET_NULL, null=True, related_name="shipping_address")

设置好后,您可以获取所查询客户的所有送货地址:

shipping_addresses = active_customer.shipping_address.all()

将它们传递到上下文,并在模板中对其进行迭代以显示它们。请注意,客户查询可能会有所不同,这取决于客户模型的设置方式。