簡體   English   中英

Django-如何將經過過濾的查詢集傳遞給Detailview

[英]Django - how to pass filtered querysets to Detailview

我有客戶端,服務器,用戶模型。 在“客戶詳細信息視圖”中,我想顯示屬於該公司的服務器和用戶。 我該如何過濾?

models.py

class Client(models.Model):
    name = models.CharField(max_length=50)
    def __str__(self):
        return self.name

class Server(models.Model):
    company = models.ForeignKey(Client, on_delete=models.CASCADE)
    name = models.CharField(max_length=50)
    def __str__(self):
        return self.name

class User(models.Model):
    company = models.ForeignKey(Client, verbose_name="Company", on_delete=models.CASCADE)
    first_name = models.CharField(max_length=50)
    last_name = models.CharField(max_length=50)
    def __str__(self):
        return self.first_name + ' ' + self.last_name

views.py

class clientdetails(LoginRequiredMixin, DetailView):
template_name = 'myapp/clientdetails.html'

def get_queryset(self):
    return Client.objects.all()

def get_context_data(self, **kwargs):
    context = super(clientdetails, self).get_context_data(**kwargs)
    context['servers'] = Server.objects.filter(** servers belonging to that client **)
    context['users'] = User.objects.filter(** servers belonging to that client **)
    return context

我該如何實現?

如果您希望將其用作一般用例,即從服務器檢索到的所有對象都必須用於特定客戶端。 您可以看一下使用limit-choices-to

class ClientDetails(LoginRequiredMixin, DetailView):
    template_name = 'myapp/clientdetails.html'
    model = Client

    def get_context_data(self, **kwargs):
        client = self.object
        context = super(ClientDetails, self).get_context_data(**kwargs)
        context['servers'] = Server.objects.filter(company=client)
        context['users'] = User.objects.filter(company=client)
        return context

或使用相關名稱

 def get_context_data(self, **kwargs):
        context = super(ClientDetails, self).get_context_data(**kwargs)
        context['servers'] = self.object.server_set.all()
        context['users'] = self.object.user_set.all()
        return context

您實際上根本不需要在視圖中執行此操作; 您可以按照模板中的關系進行操作。

{{ object.name }}
{% for server in object.server_set.all %}
    {{ server.name }}
{% endfor %}
{% for user in object.user_set.all %}
    {{ user.first_name }}
{% endfor %}

現在,您可以完全刪除get_context_data方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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