Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何从CharField中获取表单字符串值,并在Django中转换为对象实例?_Python_Django_Django Forms - Fatal编程技术网

Python 如何从CharField中获取表单字符串值,并在Django中转换为对象实例?

Python 如何从CharField中获取表单字符串值,并在Django中转换为对象实例?,python,django,django-forms,Python,Django,Django Forms,我一直遇到这个错误: 无法分配“u'Foo Group'”:“Team.membership_Group”必须是“Group”实例 在Django应用程序中,我为用户提供了创建团队的选项。该团队有一个memebership_group ForeignKey属性,该属性映射到“group”(django.contrib.auth.models.group)。在表单中,我将小部件更改为CharField,这样,如果用户键入的组实际上不是组,我的代码应该创建它。这是我的表格: class TeamFo

我一直遇到这个错误:

无法分配“u'Foo Group'”:“Team.membership_Group”必须是“Group”实例

在Django应用程序中,我为用户提供了创建团队的选项。该团队有一个memebership_group ForeignKey属性,该属性映射到“group”(django.contrib.auth.models.group)。在表单中,我将小部件更改为CharField,这样,如果用户键入的组实际上不是组,我的代码应该创建它。这是我的表格:

class TeamForm(ModelForm):
   """Form to create and modify systems"""

    membership_group = CharField()

    manager = ModelChoiceField(queryset=Manager.objects.all(), required=True)

    class Meta:
        model = Team
        fields = ['name', 'manager', 'membership_group']
在我的视图中(或者可能我需要在其他地方编写代码?),我希望获取字符串值并运行get_或_create来返回现有组或创建新组。以下是我的视图中不起作用的代码:

class TeamCreateView(AutoEventLogMixin, SuccessMessageMixin, PermissionRequiredMixin, CreateView):
    """View to create Teams"""

    form_class = TeamForm
    model = Team
    permission_required = 'teams.add_team'
    success_message = "Team '%(name)s' created successfully."
    template_name = 'teams/team_form.html'

    def form_valid(self, form):

        team_created = super(TeamCreateView, self).form_valid(form)

        team = self.object

        group_name = form.instance.membership_group

        group_name.encode('utf-8')

        membership_group = Group.objects.get_or_create(name=group_name)[0]

        team.membership_group = membership_group

        team.save()

        return team_created

我做错了什么?我需要添加什么代码(以及在哪里)才能将成员组值从一个字符串序列化/反序列化到另一个组,反之亦然

我认为无论如何,以
形式进行类型转换不是一个好主意。如果使用django1.9,则考虑创建自定义的:


team.membership\u group
是模型中的
CharField()
。因此,请为其指定一个字符串,如
team.membership\u group=group\u name
,或者将其设为.team.membership\u组在我的模型中是一个外键(组)。对不起,我读得太快了。在您的代码中,
Team
AccountableTeam
之间的关系是什么?它们是相同的,很抱歉,我将在我的问题中解决这个问题。有意义的是,类
TeamForm
正在尝试将其
成员资格组的值(一个字符串)分配给
Team
中名称相同的字段<代码>表单\u valid
不是放置类型转换代码的正确位置。
from django import forms

class MyGroupField(forms.Field):
    def to_python(self, group_name):
        return Group.objects.get_or_create(name=group_name)[0]

class TeamForm(ModelForm):
    membership_group = MyGroupField()