社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Django

Djnago如何实现form下拉列表的动态加载?

好梦一场睡-weibo • 10 年前 • 12796 次点击  

我想实现在表单中CharFiled中choices选项,直接加载数据库的某一列数据,而不是直接在表单中设置好数值,然后赋给choices参数,我目前实现了一个这样的: queue = forms.ChoiceField(label=u'队列',choices=((x.que,x.disr) for x in Queue.objects.all())) 但是这好像还是实现不了动态加载,当我在数据库中添加一条记录时,重启服务才能在下拉列表中找到,大家有什么好的方法吗?

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/904
 
12796 次点击  
文章 [ 16 ]  |  最新文章 8 年前
1871104060@qq.com
Reply   •   1 楼
1871104060@qq.com    8 年前

请问怎么实现动态的下拉菜单加载呢,求实例

HelloSam
Reply   •   2 楼
HelloSam    9 年前

@liufeily 请问用 foreignkey怎么实现?

Kris
Reply   •   3 楼
Kris    9 年前

在使用Admin时,我也遇到了这种情况。补充一点,如果是ModelForm 调用choiceField的时候应该使用self.declared_fields['first_theme'].choices

gogo
Reply   •   4 楼
gogo    10 年前

class Myform(forms.Form): def init(self, *args,kwargs): super(Myform, self).__init__(*args,kwargs) self.fields['field'] = forms.ChoiceField( label = u'', required = True, widget = forms.Select, choices = get_choice_list(), )

好梦一场睡-weibo
Reply   •   5 楼
好梦一场睡-weibo    10 年前

@liufeily 没办法呀,现在还是菜鸟一个。

好梦一场睡-weibo
Reply   •   6 楼
好梦一场睡-weibo    10 年前

@liaozd 方法可行

好梦一场睡-weibo
Reply   •   7 楼
好梦一场睡-weibo    10 年前

@kinegratii 我试了一下这个可以,还可以使用这种方法:

queue = forms.ModelChoiceField(label=u'队列',queryset=Queue.objects.all())

这样会返回一个数据库对象

37丫37
Reply   •   8 楼
37丫37    10 年前

感觉有点low啊,直接ForeignKey就可以了。

olivetree
Reply   •   9 楼
olivetree    10 年前

@kinegratii 有什么区别?没明白

liaozd
Reply   •   10 楼
liaozd    10 年前

@kinegratii 啊!同意!

def __init__(self, *args, **kwargs):
    super(self.__class__, self).__init__(*args, **kwargs)
    self.fields['queue'].choices = ((x.que,x.disr) for x in Queue.objects.all()))
kinegratii
Reply   •   11 楼
kinegratii    10 年前

这是因为,choices参数的值是立即计算的,第一次是什么以后就是什么了

__init__函数中使用动态加载

    self.fields['queue'].choices = ((x.que,x.disr) for x in Queue.objects.all()))
olivetree
Reply   •   12 楼
olivetree    10 年前

@liaozd 刷新页面没用的,强制刷新也还是会出现这样的问题。就是django的缓存问题

liaozd
Reply   •   13 楼
liaozd    10 年前

回不回可能前端有关系,需要刷新页面。

olivetree
Reply   •   14 楼
olivetree    10 年前

这是因为查询的结果集是有缓存的,你试试这样的语句(我没试过,网上有人说可以避免使用缓存):

star_set = Star.objects.all()
# iterator()可以一次只从数据库获取少量数据,这样可以节省内存
for star in star_set.iterator():
    print(star.name)
好梦一场睡-weibo
Reply   •   15 楼
好梦一场睡-weibo    10 年前

@liaozd 已经save()了,我在数据库中都能查到。

liaozd
Reply   •   16 楼
liaozd    10 年前

有可能是你的object没有save,Queue.save()了么?