gpt4 book ai didi

python - Django 组选项列表

转载 作者:行者123 更新时间:2023-12-01 08:47:12 25 4
gpt4 key购买 nike

使用 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'), ) ), ] 

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

最佳答案

您正在构建单个字符串,而不是元组列表。我不知道你为什么要这么做。您应该将其保留为 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)]

关于python - Django 组选项列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53258669/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com