簡體   English   中英

Django如何從查詢集中向對象添加數據

[英]Django how to add data to Object from queryset

我想顯示客戶端列表並顯示分配給他們的標簽,但我有問題,因為我的標簽在其他表中,我不知道如何將數據連接在一起。 客戶端可以有幾個標簽,也可以沒有。 哪種方法是正確的? 你能給我一些建議嗎? 我需要一個帶有標簽分隔逗號的變量或帶有標簽的對象,我可以在模板引擎中使用它們。

視圖.py:

@user_passes_test(lambda u: u.is_staff, login_url='/account/login/')
def client_list(request):
    dict = {}
    dict['clients'] = Client.objects.all()

    return render(request, 'panel/client/list.html', dict)

模型.py:

class Client(models.Model):
    id = models.OneToOneField(User, on_delete=models.CASCADE, unique=True, primary_key=True)
    uuid = models.UUIDField(default=uuid.uuid4, editable=False)
    name = models.CharField(max_length=256, unique=True)

class TagsClientChoices(models.Model):
    name = models.CharField(max_length=80, unique=True)

class TagsClientList(models.Model):
    tag_id = models.ForeignKey('TagsClientChoices')
    client = models.ForeignKey('Client', blank=True, null=True)

默認情況下,每個外鍵都與 _set 有反向關系

所以你可以這樣做

for client in clients:
    for taglist in client.tagsclientlist_set.all():
        # use taglist

雖然這可能不是很高效,但您可能希望prefetch_related並提供一個 related_name ,它將在兩個查詢而不是多個查詢中檢索結果。

class TagsClientList(models.Model):
    tag_id = models.ForeignKey('TagsClientChoices')
    client = models.ForeignKey('Client', blank=True, null=True, related_name='tags_list')



dict['clients'] = Client.objects.all().prefetch_related('tags_list')

for client in clients:
    for taglist in client.tags_list.all():
        # use taglist

暫無
暫無

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

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