如果在我的模型中,Moneybook有很多积压记录。
所以,我设计了一个模型
Moneybook / models.py
name = models.CharField(max_length=30, default="행복한 여행!")
owner = models.ForeignKey(
user_models.User, on_delete=models.CASCADE, related_name="owner")
companion = models.ManyToManyField(
user_models.User, related_name="companion", blank=True)
country = CountryField()
location = models.CharField(max_length=50, blank=True)
start_date = models.DateTimeField(default=NOW)
end_date = models.DateTimeField(default=NOW)
Moneylog / models.py
moneybook = models.ForeignKey(
moneybook_models.Moneybook, on_delete=models.CASCADE, related_name="moneybooks")
payer = models.ForeignKey(
user_models.User, on_delete=models.CASCADE, related_name="payer")
dutch_payer = models.ManyToManyField(
user_models.User, related_name="dutch_payer")
price = models.IntegerField()
category = models.CharField(max_length=10)
memo = models.TextField()
如果我想在每个所属的资金簿中加载所有资金记录。我如何加载它?
我想...
def moneybook_detail(request, pk):
moneylogs=moneylog.filter(moneylog.moneybook.id=request.moneybook.id)
return render(request, "moneybooks/detail.html")
但发生错误。
moneylogs = moneylog.filter(request.moneybook.id=request.moneybook.id)
SyntaxError: keyword can't be an expression
答案 0 :(得分:2)
您可以使用双下划线__
根据引用的对象字段进行过滤,从而通过以下查询查询Moneylog表。
moneylogs = MoneyLog.filter(moneybook__id=<<<MoneyBookID_GOES_HERE>>>)
或者通过在Django中使用内部ReverseManyToOneManager
只需使用
moneybook = MoneyBook.objects.get(pk=<<<<MoneyBookID_GOES_HERE>>>>)
moneylogs = moneybook.moneylog_set.all() # all() to get all money logs
# You can do filter(...) on it too to filter the moneylogs too.
这将返回与存折有关的所有货币记录。
答案 1 :(得分:1)
通常,您必须使用双下划线__
来引用过滤器中的外键列:
def moneybook_detail(request, pk):
moneylogs=moneylog.filter(moneybook__id=request.moneybook.id)
return render(request, "moneybooks/detail.html")