首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多到多-正确的用法

问多到多-正确的用法
EN

Stack Overflow用户
提问于 2015-06-19 12:09:28
回答 3查看 60关注 0票数 0

我有这样的模特:

代码语言:javascript
复制
User:
    #somefields
    apps = models.ManyToManyField(App)

在这里,用户最初是在注册期间创建的。他在一个单独的页面中将多个应用程序链接到多个应用程序,用户只选择(多个)应用程序,而不选择其他字段。

在Django中填充应用程序的最佳方法是什么?

例如,如果我们也可以创建用户,我们可以简单地使用modelform,其中.save(commit=False)将创建用户,.save_m2m()将链接应用程序。但在这里,我们不需要创建用户。我们将有用户已经,我们只需要添加应用程序。怎么做到的?

新增加的细节:我知道如何处理正常的“表单”和正常的web方式。但我想写质量代码所以我想知道。如果使用普通形式没有什么问题,那么就可以了。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-06-20 19:47:55

有多种方法可以做到这一点,但例如:

代码语言:javascript
复制
class UserAppForm(ModelForm):
  class Meta:
      model = User
      fields = ['apps']

在您看来,您可以配置路由,以便:

  • 获取要选择的用户ID
  • 如果找不到ID (而不是创建新ID),则引发错误。
  • 使用用户初始化表单

例如:

代码语言:javascript
复制
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})
票数 0
EN

Stack Overflow用户

发布于 2015-06-19 12:16:37

也许我没有完全理解这个问题(如果不是这样的话,请澄清一下),但是在同一个模型上有两种形式是没有问题的:

  • 一种创建用户的表单,而不选择应用程序(将为空)
  • 一种将应用程序添加到用户的表单,同时考虑到它已经存在(此时尚未创建)。

它回答问题了吗?

票数 0
EN

Stack Overflow用户

发布于 2015-06-19 12:22:23

您可以使用ModelForm和User字段创建一个User表单。现在,在创建表单时,为User设置一个初始值:

代码语言:javascript
复制
form = AppForm(initial={'user': 1})
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30937801

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档