我希望超级用户或代理能够在用户收集数据时随时向用户个人资料添加字段。
例如,代理将通过前端单击添加新字段按钮,链接将自动创建字段,添加到“配置文件”模型并通过django South制作移动。现在我尝试通过inlineformset工厂添加其他字段来完成此操作。
问题是数据库中没有创建字段,因此保存在字段中输入的数据也不起作用。
我有'Profile'模型用于用户详细信息,'Userform'用于与用户模型相关的详细信息。
现在,下面是我的表格和观点
class BaseProfileEditInlineFormSet(BaseInlineFormSet):
def add_fields(self, form, index):
super().add_fields(form, index)
form.fields['more_field'] = forms.CharField()
form.fields['more_field'] = forms.CharField()
视图
@login_required
def edit_user_profile(request, pk):
userpro = CustomUser.objects.get(pk=pk)
user_form = UserForm(instance=userpro)
ProfileInlineFormset = inlineformset_factory(CustomUser, Profile, exclude=['user','pub_date','modified_date','basic_verification','phone_confirmed'],formset=BaseProfileEditInlineFormSet, max_num=1, can_delete=False)
formset = ProfileInlineFormset(instance=userpro)
if request.user.is_authenticated and request.user.id == userpro.id:
if request.method == "POST":
user_form = UserForm(request.POST, request.FILES, instance=userpro)
formset = ProfileInlineFormset(request.POST, request.FILES, instance=userpro)
if user_form.is_valid():
created_user = user_form.save(commit=False)
formset = ProfileInlineFormset(request.POST, request.FILES, instance=userpro)
if formset.is_valid():
created_user.save()
formset.save()
return HttpResponse('saved data')
return render(request, 'accounts/account_update.html', {'pk':pk, 'user_form': user_form, 'formset':formset,})
else:
raise PermissionDenied
我错过了什么?
您是否认为这是一个好主意,因为生产中的迁移将与本地服务器中的迁移不同?或者最好在模型中定义字段,而不是添加此功能。我需要启蒙。