2017-11-04 97 views
0

我使用默認的用戶模型,並創建了一個名爲Team的自定義模型。用戶只能在一個團隊中,但一個團隊可以有很多用戶。因此,我必須在用戶模型中創建ForeignKey字段。將ForeignKey字段添加到默認用戶而不進行修改?

的事情是,我使用的是默認的用戶通過簡單地導入用戶與from django.contrib.auth.models import User

什麼是添加一個ForeignKey場到默認的用戶模型的最簡單的方法?我是否需要擴展默認的用戶模型?

或者有沒有辦法讓我在Team中添加一個ForeignKey字段,並交換User和Team之間的關係?

+0

這是相當廣泛覆蓋的[文檔】在(https://docs.djangoproject.com/en/1.11/topics/auth/customizing/#extending-the-existing-user-model)。您可以創建配置文件模型或替換用戶模型。 – solarissmoke

回答

0

說實話,當你使用默認的Django用戶模型時,最好創建一個自定義用戶模型,以便更容易修改。下面是一個關於如何使用AbtractBaseUser修改User類的簡單示例。如果你想添加一個外鍵,只需使用ForeignKey而不是下面的數據類型。

from __future__ import unicode_literals 
from django.utils import timezone 
from django.contrib.auth.models import (AbstractBaseUser,PermissionsMixin) 
from django.db import models 

class User(AbstractBaseUser, PermissionsMixin): 

    email = models.EmailField(unique=True) 
    username = models.CharField(max_length=7, unique=True) 
    formattedusername = models.CharField(max_length=11, unique=True, primary_key = True) 
    first_name = models.CharField(max_length=40) 
    last_name = models.CharField(max_length=140) 
    date_joined = models.DateTimeField(default=timezone.now) 
    is_active = models.BooleanField(default=True) 
    is_staff = models.BooleanField(default=False) 
    facility = models.CharField(max_length=140) 
    jobdescription = models.CharField(max_length=140) 
    positiondescription = models.CharField(max_length=140) 
    coid = models.CharField(max_length=5) 
    streetaddress = models.CharField(max_length=140) 



    USERNAME_FIELD = 'username' 

    class Meta: 
     app_label = 'accounts' 
     db_table = "user" 

# REQUIRED_FIELDS = "username" 

    def __str__(self): 
     return "@{}".format(self.username) 
+1

如果我們從AbstractBaseUser繼承,我們是否仍然需要定義像'email'或'is_active'這樣的字段?這些字段是否因爲繼承而自動提供?在這個說明中,我們是否也必須具有'class Meta:'和'def __str__'? – Valachio

+0

是的,在使用AbstractBaseUser時,您仍然必須定義字段,而不是使用用戶模型創建新模型。 def_str_就是您的管理員將如何顯示用戶名。如果您想使用現有數據庫,則不必使用Meta。在我的情況下,我創建了一個新的用戶,並將用戶從舊的移動到新的。 – student101

+1

我最終創建了AbstractUser的子類,因爲那樣我只需要根據需要添加額外的字段,而且我不必定義自定義管理模型(我只是使用UserAdmin,並添加了其他字段) – Valachio

0

在我看來,實現你想要的最好的方法是使用中間表。因此,您可以照常創建您的Team模型,然後使用兩個外鍵創建另一個模型UserTeam。這是一個例子,它可能會改變,隨時將其改爲您的需求。

class Group(models.Model): 
    group = models.ForeignKey(User, on_delete=models.CASCADE) 
    group = models.ForeignKey(Team, on_delete=models.CASCADE) 


class Team (models.Model): 
    group = models.ForeignKey(Group, on_delete=models.CASCADE) 
    #your other fields 
+0

糾正我,如果我錯了,我記得爲ManyToMany字段閱讀了一些關於此的內容,但不是ForeignKeys的。你還需要一個'through ='Group''的權利? – Valachio

相關問題