我正在制作一个设置界面,它通过扫描已安装应用程序中的设置文件夹、扫描设置文件、最后扫描 ModelForms 来工作。
我现在处于最后一步。表单已正确找到并加载,但我现在需要提供初始数据。初始数据将从数据库中提取,正如您可以想象的那样,它必须仅限于经过身份验证的用户(通过 request.user.id)。
请记住,这一切都是动态完成的。没有任何名称,也没有高级已知的结构(我真的不想维护一个无聊的设置界面)。
这是一个示例设置表单。我只是选择模型和用户可以编辑的字段(这是我想要维护设置界面的程度)。
class Set_Personal_Info(forms.ModelForm):
class Meta:
model = UserProfile
fields = ('nick_name', 'url')
我看过 modelformset_factory几乎可以做我想做的事情,但它似乎只适用于两个或更多的结果。(这里,obj是设置形式之一)
Formset = modelformset_factory(obj.Meta.model, form=obj)
Formset(queryset=obj.Meta.model.objects.filter(id=request.user.id))
我无法过滤数据,我必须得到一个,而且只有一个结果。不幸的是我不能使用 get()
Formset = modelformset_factory(obj.Meta.model, form=obj)
Formset(queryset=obj.Meta.model.objects.get(id=request.user.id))
“用户”对象没有“有序”属性
将查询结果作为初始数据提供也不起作用,因为它不是列表。
Formset = modelformset_factory(obj.Meta.model, form=obj)
Formset(initial=obj.Meta.model.objects.get(id=request.user.id))
“用户”对象不支持索引
我有一种感觉,答案就在我面前。如何从数据库中提取数据库并将其作为初始值推入表单?