我是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 :(得分:0)
看看Django的QuerySet values_list()
。以下是一个修改过的示例,用于演示其工作原理:
>>> Status.objects.values_list('name', flat=True)
<QuerySet ['Okay', 'Not Okay', 'Uh-oh', ...]>
你应该能够用它来帮助很快地构建那个词。