【问题标题】:Django select choices with optgroup fails to validate带有 optgroup 的 Django 选择选项无法验证
【发布时间】:2011-04-18 02:17:40
【问题描述】:

我在 Django 中有一个带有两个内联表单的表单。其中之一让我感到悲伤。 我的模型是这样的。

class BookingActivity(models.Model):
    booking = models.ForeignKey('Booking')
    program = models.ForeignKey(Program)
    activity = models.ForeignKey(Activity, choices=programs_as_optgroups())

activity ForeignKey 选项是通过此方法生成的:

def programs_as_optgroups():
    activities = []
    programs = []
    for program in Program.objects.all():
        new_program = []
        new_activities = []
        for activity in Activity.objects.filter(program=program):
            new_activities.append([activity.id, activity.name])

        new_program = [program.name, new_activities]
        activities.append(new_program)

    return activities

我正在尝试将 <optgroup> 标记添加到我的 ForeignKey 选择中,这是有效的。但是当我提交表单时出现错误:Cannot assign "u'3'": "BookingActivity.activity" must be a "Activity" instance.

这有点道理——有点意思。但是,如果我检查从表单帖子发送的request 数据。选择是否设置,我得到相同的值,即

activity = models.ForeignKey(Activity, choices=programs_as_optgroups())

activity = models.ForeignKey(Activity)

两者都从表单中返回 u'3'。但我无法弄清楚为什么我只有在使用 optgroups 时才会收到错误。

【问题讨论】:

    标签: django django-models django-forms


    【解决方案1】:

    我猜你正在尝试

    http://dealingit.wordpress.com/2009/10/26/django-tip-showing-optgroup-in-a-modelform/

    在博客中

    sub_categories.append([sub_category.id, sub_category.name])
    

    你有

    new_activities.append([activity.id, activity])
    

    我认为您假设您将获得一个对象,而实际上它是您要返回的字符串。

    【讨论】:

    • 你猜对了。尽管您正在阅读的内容仍然是正确的,因为 acivity 只是通过 unicode 方法选择的标题。不过我会更新我的代码。
    • @sdk900 也许你应该把它放在你的 init 方法中 super ... 对我来说这看起来很重要。
    • 是的,这就是问题所在,但因为我愚蠢地将我的 __init__ 方法放在了我的 Meta 类之前,我假设因为它有表单的 model ,所以覆盖了更新的字段。虽然我曾尝试在 modelForm 中更改像 activity = forms.ChoiceField(choices=programs_as_optgroups()) 这样的字段,这给了我与上述相同的错误。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-30
    • 1970-01-01
    • 2015-09-24
    相关资源
    最近更新 更多