[英]Django Pass Model Field as Parameter to URL Stored in Another Model
我有三種模式:
class Entity(models.Model):
entity = models.CharField(primary_key=True, max_length=25)
class Report(models.Model):
report = models.CharField(max_length=50)
report_link = models.CharField(max_length=300)
class Item(models.Model):
entities = models.ManyToManyField(Entity, related_name='entities')
report = models.ForeginKey(Report)
視圖是基於Item
模型構建的:
def item_list(request):
items = Item.objects.select_related('report').prefetch_related('entities')
return render(request, 'items/item_list.html', {'items':items})
該視圖被路由到模板:
{% for item in items %}
<tr>
<td>
{% for entity in item.entities.all %}
{{ entity }}{% if not forloop.last %}, {% endif %}
{% endfor %}
</td>
<td>{{ item.report }}</td>
<td>{{ item.report.report_link|urlize }}</td>
</tr>
{% endfor %}
這行( <td>{{ item.report.report_link|urlize }}</td>
)在瀏覽器中顯示如下:
https://server.domain/reports/specificReport?entity=
如何將entities
傳遞到URL中以過濾報告? 所需的結果如下所示:
https://server.domain/reports/specificReport?entity=12345
...或者一個item
有多個entities
:
https://server.domain/reports/specificReport?entity=12345,56789
Report
模型中的每個報表都有一個鏈接,但是該鏈接不一定采用實體參數,因此全局更改所有鏈接(即通過jQuery或其他JS)並不是理想的選擇。 但是,此頁面上正在運行JS,因此可以使用它...盡管我認為Django選項可能是最好的。
我考慮過的一件事是在Report
模型中添加一個指示器,用於標記是否應將entities
添加到鏈接中……但這並不能解決將一個模型字段附加到另一個模型字段的最后一個主要問題。 “他們倆在一起。
創建鏈接的模型方法怎么樣? Django文檔提到以下有關使用模型方法的內容,適用於您的用例
這是將業務邏輯放在一個位置(模型)中的寶貴技術。
這意味着您無需挖掘模板和模板標簽即可查看如何生成項目的報告鏈接-您可以在models.py中查看所有內容
以下內容可能是一個起點
class Item(models.Model):
entities = models.ManyToManyField(Entity, related_name='entities')
report = models.ForeginKey(Report)
def get_report_link(self):
link_text = self.report.report_link
if self.entities.count() > 0:
link_text + "?entity={}".format(','.join([entity.id for entity in self.entities.all()]))
return link_text
然后在您的模板中:將item.report.report_link|urlize
更改為item.get_report_link
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.