Django-我可以从连接到我的应用程序的模型中显示我的应用程序Detailview中的数据

时间:2018-04-16 23:44:16

标签: django python-3.x django-models django-templates django-views

我的Django(1.11)项目中有3个应用程序:

我的 期刊 应用有一个HitCurrent型号,其Journal字段与我的 费率相关联应用我的 产品 应用也通过ForeignKey从{{{{}}连接到 费率 应用1}}模型。

以下是三个模型的代码:

ForeignKey

我可以根据Product# journal app class Journal(models.Model): name = models.CharField(_('Name'), max_length=255) ... def __str__(self): return self.name # product app class Product(models.Model): name = models.CharField(_('Name'), max_length=255) ... def __str__(self): return self.name # rate app from journal.models import Journal from product.models import Product class Frequency(models.Model): frequency = models.CharField(max_length=20) def __str__(self): return self.frequency class Rate(models.Model): price = models.DecimalField(max_digits=10, decimal_places=2) frequency = models.ForeignKey(Frequency) product = models.ForeignKey(Product) journal = models.ForeignKey(Journal) def __str__(self): return str(self.price) priceRate模型中定义Product.name。由于 费率 应用允许我根据频率期刊为每个产品设置价格,我想在此视图呈现的模板中的 期刊 应用中显示该信息:

Journal.name

这样就可以Frequency.frequency

中所有与期刊相关的信息

我的问题: 是否可以通过 期刊 应用访问特定产品和期刊所特有的费率数据?我知道从class JournalDetailView(DetailView): context_object_name = 'journal' model = Journal queryset = Journal.objects.all() template_name = 'journal_detail.html' 添加另一个ForeignKey到journal_detail.html会抛出一个错误,但我想不出任何其他逻辑来完成这个任务。

2 个答案:

答案 0 :(得分:1)

是否可以将产品和费率模型导入日记应用,然后按照与日记的关系过滤产品,然后找到关联的费率对象?

答案 1 :(得分:1)

如果我理解你的问题,那么你应该可以做到。

class JournalDetailView(DetailView):
    context_object_name = 'journal'
    model = Journal
    template_name = 'journal_detail.html'

    def get_context_data(self, **kwargs):
        ctx = super().get_context_data(**kwargs)

        # rates related to the current journal
        ctx['rates_list_1'] = self.object.rate_set.all()

        # rates related to the current journal and a specific product
        # that has been past to the request as an query string parameter
        some_product = get_object_or_404(
            Product, pk=self.request.GET.get('product_id'))
        ctx['rates_list_2'] = self.object.rate_set.filter(product=some_product)

        return ctx

此代码示例利用get_context_data method向模板上下文添加变量。