簡體   English   中英

Django將模型字段作為參數傳遞給另一個模型中存儲的URL

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM