我的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)
和price
在Rate
模型中定义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
会抛出一个错误,但我想不出任何其他逻辑来完成这个任务。
答案 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向模板上下文添加变量。