繁体   English   中英

如何从CharField中获取字符串形式的值并将其转换为Django中的对象实例?

[英]How to take form string value from CharField and convert into object instance in Django?

我一直遇到这个错误:

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

在我的Django应用程序中,我为用户提供了创建团队的选项。 该团队具有一个memebership_group ForeignKey属性,该属性映射到“组”(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_or_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

我究竟做错了什么? 我需要添加(以及在何处)什么代码,才能将成员资格组值从字符串序列化/反序列化,反之亦然

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

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()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM