簡體   English   中英

Django-使用這些模型構建查詢

[英]Django - build a query with these models

目標是:

管理員登錄以查看其協會中所有已注冊成員的列表。 管理員不希望看到其他協會中的成員,而只希望看到其協會中的成員。

例:

教練(Admin)希望看到他在皇家馬德里(協會)的所有球員,並且不希望看到他團隊中的其他足球俱樂部(協會)的球員。

我已經嘗試了很長時間並且用盡了所有想法,所以希望你們有一些很棒的想法我可以嘗試= 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()})

讓我知道您是否需要更多信息!

好的,所以您要使用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)

編輯

好的,當您創建管理員用戶時,您需要傳遞一個關聯。 一種方法是讓選擇關聯成為注冊過程的一部分。 因此,例如,您可以將ModelChoiceField添加到注冊表單或類似的表單中,或者將管理員置於默認關聯中。 但是,這樣做的想法是,當您創建用戶時,已經准備好關聯對象,並將其傳遞給Administrator.create_user。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM