2016-01-25 53 views
1

每當我創建一個新帳戶時,輸入「first_name」,「last_name」,「username」,「age」,「city」,「state 「,」email「在內置的用戶模型和我創建的Person模型之間進行拆分。當我點擊剛剛創建的用戶時,我可以在管理網站上看到這種情況。Django:在「用戶」和「人」模型之間劃分的用戶信息

人模式:

class Person(models.Model): 
    user = models.OneToOneField(User, on_delete=models.CASCADE) 
    username = models.CharField(max_length=200, null=True) 
    first_name = models.CharField(max_length=200, null=True) 
    last_name = models.CharField(max_length=200, null=True) 
    email = models.CharField(max_length=200, null=True) 
    city = models.CharField(max_length=200, null=True) 
    state = models.CharField(max_length=200, null=True) 
    age = models.CharField(max_length=50, null=True) 

查看創建帳戶:

def create_account(request): 
    if request.method == 'POST': 
     new_user = User(username = request.POST["username"], 
        email=request.POST["email"], 
        first_name=request.POST["first_name"], 
        last_name=request.POST["last_name"]) 
     new_user.set_password(request.POST["password"]) 
     new_user.save() 
     Person.objects.create(user=new_user, 
          age=str(request.POST.get("age")), 
          city=str(request.POST.get("city")), 
          state=str(request.POST.get("state"))) 
     new_user.is_active = True 
     new_user.save() 
     return redirect('../') 
    else: 
     return render(request, 'polls/create_account.html') 

我知道這個問題是在這個模型和視圖,我只是不能概念化如何把所有的我提交到Person模型中的信息(因爲User模型只有「first_name」,「last_name」,「email」屬性)。

+0

不回答你的問題(@wim是對的),但只是提供一些提示。你不應該使用'request.POST.get'。使用'ModelForm'更加實用(處理驗證和更少的代碼)。您可以發佈2個帶有前綴的表格,或將這些表格分組在1大表格下。另外,如果你剛剛開始這個項目,你可能會考慮替換'User'模型而不是添加一個'Person'模型。 –

+0

感謝哥們。我見過很多使用ModelForm進行驗證的人,我正在考慮修補它。 – TyCharm

回答

3

由於您的Person模式有一個一到一個與User,你並不需要在其上存儲usernamefirst_namelast_name領域。只需將它們留在User模型上並通過關係訪問它們,您畢竟使用了關係數據庫

+0

太棒了!我剛剛嘗試過,它像一個魅力。 – TyCharm