【问题标题】:Get Absolute Url keeps directing to one particular id获取绝对网址不断重定向到一个特定的 id
【发布时间】:2021-03-20 23:40:54
【问题描述】:

您好,我有一个 Django 项目,我想在其中显示订单列表和详细信息。一切似乎都运行良好,但链接只链接到一个特定的 id(例如 id 66)。我已经尝试从管理面板中删除特定的订单 ID,认为 URL 可能会重置,但我的 URL id 增加了,现在它不再是 id 66 而是 67。请问我该如何解决这个问题?这是我的代码:

models.py

class Order(models.Model):
    user = models.ForeignKey(User, null=True, on_delete=models.CASCADE)
    first_name = models.CharField(max_length=50)
    last_name = models.CharField(max_length=50)
    email = models.EmailField()
    address = models.CharField(max_length=250)
    phone_number = models.CharField(max_length=20)
    city = models.CharField(max_length=100)
    created = models.DateTimeField(auto_now_add=True)
    updated = models.DateTimeField(auto_now=True)
    paid = models.BooleanField(default=False)
    braintree_id = models.CharField(max_length=150, blank=True)
    coupon = models.ForeignKey(Coupon, related_name='orders', null=True, blank=True, on_delete=models.SET_NULL)
    discount = models.IntegerField(default=0, validators=[
        MinValueValidator(0),
        MaxValueValidator(100)
    ])

    class Meta:
        ordering = ('-created',)

    def __str__(self):
        return self.first_name

    def get_absolute_url(self):
        return reverse('orders:orderdetail', args=[self.id])

views.py

def order_list(request):
    orders = Order.objects.all()
    current_user = request.user
    success = Order.objects.filter(user=current_user.id).filter(paid=True)
    fail = Order.objects.filter(user=current_user.id).filter(paid=False)
    return render(request, 'orders/order/order_list.html', {
        'success': success,
        'fail': fail,
        'current_user': current_user,
        'orders':orders,
    })


def order_detail(request, order_id):
    order = get_object_or_404(Order, id=order_id)
    return render(request, 'orders/order/order_detail.html', {'order': order})

urls.py

from django.urls import path
from . import views

app_name = 'orders'

urlpatterns = [
    path('create/', views.order_create, name='order_create'),
    path('admin/order/<int:order_id>/', views.admin_order_detail, name='admin_order_detail'),
    path('admin/order/<int:order_id>/pdf/', views.admin_order_pdf, name='admin_order_pdf'),
    path('addtocart/<int:id>', views.addtocart, name='addtocart'),
    path('myorder/', views.order_list, name='orderlist'),
    path('myorder/detail/<int:order_id>/', views.order_detail, name='orderdetail'),

]

html

{% for order in orders %}
<a href="{{ order.get_absolute_url }}" style="position: absolute; top: 5px; right: 5px;">
View Details
</a>
{% endfor %}

完整的 html

<div class="col-md-9">
{% for od in success %}
<div class="card mb-3" style="max-width: 540px;">
<div class="row no-gutters">
<div class="col-md-3">
<img alt="product img" class="card-img" src="...">
</div>
<div class="col-md-9">
<div class="card-body" style="position: relative;">
<h5 class="card-title">Product {{ od.id }}</h5>
{% for order in orders %}
<a href="{{ order.get_absolute_url }}" style="position: absolute; top: 5px; right: 5px;">
View Details
</a>
{% endfor %}
<p class="card-text">
<mark style="color: whitesmoke; background-color: brown;border-radius: 3px;font-weight: bold;">{{transaction}}</mark>
</p>
<p class="card-text"><small class="text-muted">Delivered at
                                                    {{od.reference_id}}</small></p>
</div>
</div>
</div>
</div>
{% endfor %}
</div>

我得到的网址是这样的/orders/myorder/detail/66/ 我将添加图片以使其不那么抽象 谢谢。

【问题讨论】:

  • 我不明白你的需要。你在期待什么?
  • 我列出了超过 1 个订单并希望显示每个订单,但绝对 URL 链接到一个订单
  • get_absolute_url() 旨在指向单个对象。请查看 django 文档:docs.djangoproject.com/en/3.1/ref/models/instances/…
  • 你能分享你的完整 html 文件吗?它是从 /myorder/ 调用的?我认为您更改了订单上下文。
  • @EricMartin 我已经编辑过了。

标签: python django django-models django-urls


【解决方案1】:

就像@EricMartin 所说,这是订单的上下文 我意识到我有{% for od in success %}{% for order in orders %} 我猜他们之间的关系不太好,因为订单成功,我删除了{% for order in orders %} 循环,一切看起来又平静了:)

【讨论】:

    猜你喜欢
    • 2021-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-19
    相关资源
    最近更新 更多