Django表单;使用ModelForm覆盖选择 - python

我想做的是根据页面隐藏或显示一些选择。
例如,

models.py

USA = 'usa'
FRANCE = 'france'
CHINA = 'china'
GERMANY = 'germany'
SPAIN = 'spain'

TOPICS = (
    (USA, 'USA'),
    (FRANCE, 'France'),
    (CHINA, 'China'),
    (GERMANY, 'Germany'),
    (SPAIN, 'Spain'),
        )

topic = models.CharField(
    choices=TOPICS,
    default=USA,
    )

对于页面,我想强迫用户不要选择USA,所以我想以表格形式隐藏USA并更改默认值。我怎样才能做到这一点?

这是我当前的代码。
    AForm(forms.ModelForm)类:

    class Meta:
        model = A
        fields = ['topic',]

    def __init__(self, *args, **kwargs):


        super().__init__(*args, **kwargs)

                self.fields['topic'].choices = ['France', 'Germany', 'Spain']

发生错误。

  ValueError:太多值无法解包(预期2)

并且我将其替换为随机的两个字符,例如ab,即使我没有在模型上定义它,也可以选择其中一个字符出现在表单上。我仍然不明白如何将覆盖的选择与模型相关联。 ModelForm的正确方法是什么?

python大神给出的解决方案

这与ModelForm无关,但与定义选项的方式有关-选择应该是(value, label)元组的列表(请看您如何在模型中定义选择),而不是值的列表。您想要的是:

self.fields['topic'].choices = [
  ('france','France'), 
  ('germany', 'Germany'), 
  ('spain', 'Spain')
  ]

或更好):

self.fields['topic'].choices = [
   choice for choice in YourModel.TOPICS
   if choice[0] in ('france', 'germany', 'spain')
   ]

Python pytz时区函数返回的时区为9分钟 - python

由于某些原因,我无法从以下代码中找出原因:>>> from pytz import timezone >>> timezone('America/Chicago') 我得到:<DstTzInfo 'America/Chicago' LMT-1 day, 18:09:00 STD…

如何在Django中获取视图函数的URL路径 - python

举个例子:view.pydef view1( request ): return HttpResponse( "just a test..." ) urls.pyurlpatterns = patterns('', url( r'^view1$', 'app1.view.view1…

用大写字母拆分字符串,但忽略AAA Python Regex - python

我的正则表达式:vendor = "MyNameIsJoe. I'mWorkerInAAAinc." ven = re.split(r'(?<=[a-z])[A-Z]|[A-Z](?=[a-z])', vendor) 以大写字母分割字符串,例如:'我的名字是乔。 I'mWorkerInAAAinc”变成…

Python:同时在for循环中添加到列表列表 - python

我想用for循环外的0索引值创建一个新列表,然后使用for循环添加到相同的列表。我的玩具示例是:import random data = ['t1', 't2', 't3'] masterlist = [['col1', 'animal1', 'an…

查找字符串中的行数 - python

我正在创建一个python电影播放器​​/制作器,我想在多行字符串中找到行数。我想知道是否有任何内置函数或可以编写代码的函数来做到这一点:x = """ line1 line2 """ getLines(x) python大神给出的解决方案 如果换行符是'\n',则nlines …