我有这样的模特:
User:
#somefields
apps = models.ManyToManyField(App)
此处,用户最初是在注册期间创建的。他在单独的页面中使用多个应用程序链接应用程序,用户只选择(多个)应用程序,而不选择任何其他字段。
在Django中填充应用程序的最佳方法是什么?
例如,如果我们也可以创建User,我们可以简单地使用modelform,其中.save(commit = False)将创建用户,而.save_m2m()将链接应用程序。但在这里我们不需要创建用户。我们已经有了用户,我们只需要添加应用。怎么样 ?
新增详情: 我知道如何处理正常"形式"和正常的网络方式。但我想写出高质量的代码,所以想知道。如果使用普通形式没有任何问题,那就好了。
答案 0 :(得分:0)
也许我没有完全理解这个问题(请澄清是否不是这样),但在同一型号上有两种形式没有问题:
它回答了这个问题吗?
答案 1 :(得分:0)
您可以使用ModelForm
和model = App
字段创建User
表单。现在,在创建表单时,设置User
的初始值:
form = AppForm(initial={'user': 1})
答案 2 :(得分:0)
有多种方法可以做到这一点,例如:
class UserAppForm(ModelForm):
class Meta:
model = User
fields = ['apps']
在您看来,您可以配置路由,以便:
例如:
def user_add_app(request, pk):
user = get_object_or_404(User, pk=pk)
if request.method == "POST":
form = UserAppForm(request.POST, instance=user)
if form.is_valid():
user = form.save()
return HttpResponseRedirect(<some redirect>)
else:
form = EmployeeForm(instance=user)
return render(request, "<some html file>", {'form': form})