2017-03-07 30 views
0

的目標是:Django的 - 建立一個查詢有這些模特

管理日誌中看到所有註冊會員在他的協會名單。管理員不希望看到其他社團中的成員,但僅限於他的社團中。

例子:

教練(管理員)想看到所有他的球員在皇馬(協會)和不希望看到其他的足球俱樂部(協會)球員在他的球隊。

我已經嘗試了很長的時間跑出去的想法,所以希望你們有一些偉大的想法我可以嘗試= d

仍然是一個新手,所以感謝您的幫助!

管理\ models.py

class Administrator(AbstractUser): 
    ... 
    asoc_name = models.CharField(max_length=100) 


    class Meta: 
     db_table = 'Administrator' 

成員\ models.py

from pl.admin.models import Administrator 


class Member(models.Model): 
    member_no = models.AutoField(primary_key=True) 
    asoc_name = models.CharField(max_length=100) 
    ... 

    class Meta: 
     db_table = 'Member' 


class Association(models.Model): 
    asocnumber = models.AutoField(primary_key=True) 
    asoc_name = models.CharField(max_length=100) 
    user = models.ForeignKey(Administrator) 
    member_no = models.ForeignKey(Member) 

    class Meta: 
     db_table = 'Association' 

views.py

def signup(request): 
    if request.method == 'POST': 
     form = SignUpForm(request.POST) 
     if not form.is_valid(): 
      return render(request, 'admin/signup.html', 
          {'form': form}) 

     else: 
      ... 
      asoc_name = form.cleaned_data.get('asoc_name') 
      ... 
      Administrator.objects.create_user(... 
               asoc_name=asoc_name,  
               ...) 
      user = authenticate(... 
           asoc_name=asoc_name, 
           ...) 
      return redirect('/') 

    else: 
     return render(request, 'admin/signup.html', 
         {'form': SignUpForm()}) 

讓我知道如果你需要更多的信息!

回答

0

好吧,您可以使用CharFields將這些模型鏈接起來,這在技術上可行,但您可能想使用ForeignKeys

潛在的,這意味着其代碼看起來像:

class Administrator(AbstractUser): 
    ... 
    asoc = models.ForeignKey(Association) 


    class Meta: 
     db_table = 'Administrator' 

class Member(models.Model): 
    member_no = models.AutoField(primary_key=True) 
    asoc = models.ForeignKey(Association) 
    ... 

    class Meta: 
     db_table = 'Member' 


class Association(models.Model): 
    asocnumber = models.AutoField(primary_key=True) 
    asoc_name = models.CharField(max_length=100) 
    member_no = models.ForeignKey(Member) 

    class Meta: 
     db_table = 'Association' 

然後可以使各種你想要的查詢。例如:給予一個管理員用戶,獲得他所有的協調成員。

Member.objects.filter(asoc=admin.asoc) 

編輯

好吧,當你創建你需要一個協會通過Administrator用戶。一種方法是選擇關聯作爲註冊過程的一部分。因此,舉例來說,您可以將ModelChoiceField添加到您的註冊表單或其他類似內容,或者將管理員置於默認關聯中。但是想法是,當你創建用戶時,你已經準備好了一個關聯對象,並將其傳遞給Administrator.create_user。

+0

在列「member_no_id」中獲取null_value空值的錯誤違反了非空約束。如果我先註冊管理員或聯盟,我會得到空值。有沒有辦法自動實現這些ID來避免null_value? – Niknak

+0

它看起來不像您現在的模型中有member_no_id。所以,也許你以前有過一個,並做了一些修改,但沒有改變數據庫。可能嘗試修復或重新創建數據庫。 – user6731765

+0

member_no_id來自'member_no = models.ForeignKey(Member)'。嘗試重新創建數據庫,但同樣的事情發生 – Niknak