2017-03-07 5 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

[OK]を、あなたが技術的に動作しますが、あなたはおそらくForeignKeysを使用することができCharFieldsを使用して、これらのモデルをリンクアップしています。あなたは、あなたが望むクエリの種類を作ることができ

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) 

編集

[OK]を、あなたが管理者ユーザーを作成するときに関連して渡す必要があります。これを行う1つの方法は、関連付けをサインアッププロセスの一部として選択することです。だから、例えば、あなたはあなたのサインアップフォーム、またはそのような何かにModelChoiceFieldを追加したり、管理者はデフォルトの関連付けに配置する可能性があります。しかし、そのアイデアは、ユーザーを作成したときに関連付けオブジェクトを準備し、それをAdministrator.create_userに渡すことです。

+0

コラム "member_no_id" でNULL_VALUE 'NULL値の誤差が届かないヌルconstraint'に違反します。もし私がadminまたはassosiationを最初に登録すると、私はnull値を取得します。 null_valueを避けるために、これらのidを自動的に実装する方法はありますか? – Niknak

+0

あなたのモデルには現在member_no_idがあるようには見えません。だから、あなたは以前にそれを持っていて、いくつかの変更を加えたがデータベースを変更しなかったかもしれない。データベースの修正や再作成を試みる可能性があります。 – user6731765

+0

member_no_idは 'member_no = models.ForeignKey(メンバー)'から来ています。データベースを再作成しようとしましたが、同じことは大丈夫、ああ – Niknak

関連する問題