2015-06-19 27 views
0

我有機型是這樣的:多對多 - 正確使用

User: 
    #somefields 
    apps = models.ManyToManyField(App) 

在這裏,用戶註冊過程中最初創建。他在單獨的頁面中使用許多到多個應用程序鏈接應用程序,用戶只選擇(多個)應用程序,沒有其他字段。

在Django中填充應用程序的最佳方式是什麼?例如,如果我們也可以創建User,那麼我們可以簡單地使用modelform,其中.save(commit = False)將創建用戶,而.save_m2m()將鏈接應用程序。但在這裏我們不需要創建用戶。我們將已經有用戶,我們只需要添加應用程序。怎麼樣 ?

新增加的詳細信息: 我知道如何處理普通的「窗體」和正常的網絡方式。但我想編寫所需的高質量代碼。如果使用正常形式沒有問題,那就很好。

回答

0

有多種方式做到這一點,但是,例如:

class UserAppForm(ModelForm): 
    class Meta: 
     model = User 
     fields = ['apps'] 

而且在您看來,您配置路由讓你可以:

  • 獲取用戶的ID選擇
  • 提高一個錯誤,如果你沒有找到ID(而不是創建一個新的)
  • 初始化形式與用戶

例如:

所有的
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

也許我沒有完全理解這個問題(請註明如果不是這種情況),但存在具有相同型號的兩種形式沒有問題:

  • 一種形式來創建用戶,而不選擇應用程序(這將是空的)
  • 一種向用戶添加應用程序的表單,考慮到它已存在(並且此時不創建)。

它回答這個問題嗎?

+0

首先,請忽略如何創建用戶,因爲這是沒有問題的。一種向用戶添加應用的形式?但是如何? – user2349115

0

您可以使用model = AppUser字段創建ModelForm表單。現在,當創建窗體設置User初始值:

form = AppForm(initial={'user': 1})