【问题标题】:Django DetailView for two seperate queries / models用于两个单独查询/模型的 Django DetailView
【发布时间】:2018-07-17 09:44:31
【问题描述】:

我的订单有一个可工作的详细视图,并希望向其中添加另一个查询集(用于模型条目),以便能够向用户读出更多数据,这些数据我没有存储在订单模型中。

由于两个模型共享相同的外键购物车,最好的攻击方法是什么?

我想的方向是:entry_obj = Entry.objects.filter(cart=Order.objects.cart)?但是如何将它实现到detailview中呢?

url(r'^(?P<order_id>[0-9A-Za-z]+)/$', views.OrderDetailView.as_view(),
    name="detail"),

class OrderDetailView(LoginRequiredMixin, DetailView):
    def get_object(self):
        qs = Order.objects.by_request(
            self.request
            ).filter(order_id = self.kwargs.get('order_id'))
        if qs.count() == 1:
            return qs.first()
        return Http404

模型.py

class Entry(models.Model):
    product = models.ForeignKey(Product, null=True)
    cart = models.ForeignKey(Cart, null=True)
    fabric = models.ForeignKey(Fabric, null=True)
    quantity = models.PositiveIntegerField()

模型.py

class Order(models.Model):
    billing_profile = models.ForeignKey(BillingProfile, null=True, blank=True)
    order_id        = models.CharField(max_length=120, blank=True)
    shipping_address= models.ForeignKey(Address, related_name="shipping_address",
                                        null=True, blank=True)
    cart            = models.ForeignKey(Cart)
    total           = models.DecimalField(default=0.00, decimal_places=2,
                        max_digits=100)
    active          = models.BooleanField(default=True)

感谢您的帮助!

【问题讨论】:

  • 你的序列化器在哪里?
  • 在创建订单时,我正在使用 pre_save 方法创建 order_id。我认为没有必要提及我的细节视图问题。

标签: django django-models django-views


【解决方案1】:

您可以为此覆盖get_context_data

class OrderDetailView(LoginRequiredMixin, DetailView):
    def get_object(self):
        qs = Order.objects.by_request(
            self.request
            ).filter(order_id = self.kwargs.get('order_id'))
        if qs.count() == 1:
            return qs.first()
        return Http404

    def get_context_data(self, **kwargs):
        context = super(OrderDetailView, self).get_context_data(**kwargs)
        context['entry_obj'] = Entry.objects.filter(cart=self.object.cart)
        return context

在模板中,您将能够获得这样的条目详细信息:

{{ entry_obj.quantity }}

【讨论】:

    猜你喜欢
    • 2020-09-23
    • 2020-05-27
    • 1970-01-01
    • 1970-01-01
    • 2020-01-11
    • 1970-01-01
    • 2023-03-07
    • 2018-05-18
    • 2022-11-27
    相关资源
    最近更新 更多