Django组选项列表

时间:2018-11-12 08:55:03

标签: python django

使用Django,我有以下工作示例以使用组选项列出列表:

self.fields["crop"].choices = [( "First", ( ('1','aaa'), ('2','bbb'), ) ), ( "Second", ( ('3','ccc'), ) ), ]

第一种方法:我尝试使用困难的方法使其动态化:

    sub_item =''
    grouped_items=''

    for k in Field.objects.filter(farm=farm):
      print (k.field_name )
      for o in Crop.objects.filter(farming_year=farming_year, field=k ): 
        sub_item = sub_item + '('+ str(o.id) + ',"' +o.crop_name  + '"),'
      grouped_items= grouped_items + '("' + k.field_name + '", (' + sub_item + ')),'
      sub_item=''
    full_list_items= '[' + grouped_items + ']'
    print (full_list_items)  
    self.fields["crop"].choices = full_list_items
    print(full_list_items )

我总是收到以下错误: 没有足够的值可解压缩(预期2,得到1)

第二种方法:要测试我的代码,我从终端复制了print(full_list_items)的结果,并将其直接分配给裁剪列表,如下所示,它可以再次使用!

self.fields["crop"].choices = [( "First", ( ('1','aaa'), ('2','bbb'), ) ), ( "Second", ( ('3','ccc'), ) ), ] 

这里的问题是为什么我在使用第一种方法时不能获得所需的结果,而在使用第二种方法时却得到了结果!

1 个答案:

答案 0 :(得分:1)

您正在建立一个字符串,而不是一个元组列表。我不知道你为什么要这么做。代替所有这些字符串连接,您应该将其保留为Python数据结构:

grouped_items = []
for k in Field.objects.filter(farm=farm):
  sub_item = []
  for o in Crop.objects.filter(farming_year=farming_year, field=k): 
    sub_item.append((str(o.id), o.crop_name))
  grouped_items.append((k.field_name, sub_item))
self.fields["crop"].choices = grouped_items

请注意,内部循环可以重写为列表理解,并可以通过使用反向关系进一步简化:

sub_item = [(str(o.id), o.crop_name) for o in k.crop_set.filter(farming_year = farming_year)]