簡體   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