[英]django: how to get value from CharField and ModelChoiceField
[英]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.