Django AbstractUser不允许保存字段数据

时间:2014-03-11 18:08:56

标签: python django postgresql

我有一个模型对象,它使用AbstractUser扩展User Object以添加字段。但是,使用html表单时,我无法将任何内容保存到这些字段中。另外,当我尝试保存在shell中时,如果字段在列表中,我无法保存...但是如果字段在列表之外,我可以保存。我正在使用带Postgres的Django 1.6。这让我发疯了。

问题仅在模型使用AbstractUser时,普通模型没有此问题。

class AccountForm(ModelForm):
    class Meta:
        model = Employee

    def __init__(self, *args, **kwargs):
        super(AccountForm, self).__init__(*args, **kwargs)
        self.helper = FormHelper()
        self.helper.form_class = 'form-horizontal'
        self.helper.label_class = 'col-lg-2 control-label'
        self.helper.field_class = 'col-lg-4'

        self.helper.layout = Layout(
            Fieldset('Account Modify',
                'irc_name',
                'forum_username',
                ),
            FormActions(
                Submit('submit', 'Submit', css_class='btn-primary')
                )
            )


class Employee(AbstractUser):
    irc_name = models.CharField(max_length="25")
    forum_username = models.CharField(max_length="25")


class AccountModify(LoginRequiredMixin, UpdateView):
    model = Employee
    form_class = AccountForm
    template_name = 'bot_data/account_modify.html'
    success_url = '/'

Shell会议:

>>> foo = Employee.objects.all()
>>> foo[1]
<Employee: dar777>
>>> foo[1].irc_name
u''
>>> foo[1].irc_name = "Steve"
>>> foo[1].irc_name
u''
>>> bar = foo[1]
>>> bar
<Employee: dar777>
>>> bar.irc_name
u''
>>> bar.irc_name = "Steve"
>>> bar.irc_name
'Steve'
>>> 

1 个答案:

答案 0 :(得分:1)

每次切片查询集django都会获得in memory object

的新实例
foo = Employee.objects.all()
foo[1] -> new instance 
foo[1].irc_name = 1234 -> new instance
foo[1].save()
print foo[1].irc_name -> will print u''

最佳做法是避免切片查询集。你可以在这个视频中找到完整的答案http://www.youtube.com/watch?v=t_ziKY1ayCo#t=1923(绑定时间)