2017-09-15 50 views
0

我是Django的新手,我正在構建文檔可見性/狀態應用程序。每個稱爲「縮進」的文檔都有一些「屬性」,這些屬性具有多個「狀態」。返回相關(1:M)的Django對象與許多作爲列表

在應用程序的儀表板上,我需要將屬性動態地呈現爲列,並將狀態作爲下拉列表中的選項動態呈現。

我想我需要返回一個字典如下 - 但如果你有更好的建議,請讓我知道。

{ 1 : ['status1','status2', 'status3'], 2 : ['status1','status2', 'status3'], ... } 

凡數是屬性ID。

這裏是我的模型:

class Indent(models.Model): 
    dateCreated = models.DateTimeField(auto_now=True) 
    indentNumber = models.CharField(max_length=75) 
    creator = models.ForeignKey(settings.AUTH_USER_MODEL) 

    def __str__(self): 
     return '%s' % (self.indentNumber) 

    class Meta: 
     verbose_name = 'Indents' 
     verbose_name_plural = "Indents" 

class Files(models.Model): 
    fileLink = models.FileField(upload_to='indents/', null=True) #Add 'indents/userID' 
    indent = models.ForeignKey(Indent, on_delete=models.CASCADE) 

    def __str__(self): 
     return '%s' % (self.indent) 

    class Meta: 
     verbose_name = 'Files' 
     verbose_name_plural = "Files" 

""" 
TO-DO 

REMOVE NULL CONSTRAINT 

""" 
class Attribute(models.Model): 
    name = models.CharField(max_length=75) 
    user = models.ForeignKey(settings.AUTH_USER_MODEL, null=True) 

    def __str__(self): 
     return '%s' % (self.name) 

    class Meta: 
     verbose_name = 'Attributes' 
     verbose_name_plural = "Attributes" 

""" 
TO-DO 

For the names of Status objects, it needs to be more descriptive and accurate 

""" 
class Status(models.Model): 
    name = models.CharField(max_length=255) 
    attribute = models.ForeignKey(Attribute, on_delete=models.CASCADE) 

    def __str__(self): 
     return '%s' % (self.name) 

    class Meta: 
     verbose_name = 'Status' 
     verbose_name_plural = "Status" 


class IndentAttribute(models.Model): 
    indent_id = models.ForeignKey(Indent, on_delete=models.CASCADE) 
    attribute_id = models.ForeignKey(Attribute, on_delete=models.CASCADE) 
    status_id = models.ForeignKey(Status, on_delete=models.CASCADE, null=True) 

    def __str__(self): 
     return '%s - %s' % (self.indent_id, self.attribute_id) 

    class Meta: 
     verbose_name = 'Indent_Attribute' 
     verbose_name_plural = "Indent_Attribute" 

下面是我們正在構建的儀表板的一個例子:

​​

回答

0

看看Django的QuerySet values_list()。這裏有一個變形例從那裏來證明它是如何工作:

>>> Status.objects.values_list('name', flat=True) 
<QuerySet ['Okay', 'Not Okay', 'Uh-oh', ...]> 

你應該能夠用它來幫助構建字典很快。

+0

感謝您的回覆! 任何想法,如果Django有一個方法來允許我加入兩個查詢集?或者我應該只是寫一些Python代碼來做到這一點? 只是想知道在Django中是否有一個更簡單的方法。 –

+0

@RizwanQaiser我不相信你可以將兩個查詢集合在一起,但是你可以用'list(my_queryset)'將它們轉換爲列表,然後將它們連接在一起。希望有所幫助! – Franey

+0

DOPE!謝啦。這是我在SO的第一個問題,你真的幫了忙。你是一個了不起的人:) –

相關問題