2011-03-14 121 views
0

最近,我一直在使用通用題注系統來幫助學生在課堂或實驗室註冊。但是我在Lab類中ManyToManyField的邏輯有問題。Django驗證組模型m2m

from django.db import models 
from django.contrib.auth.models import User 

class Day(models.Model): 
    name = models.CharField(max_length=20, primary_key=True) 

    def __unicode__(self): 
     return u"%s" % self.name 


class LabName(models.Model): 
    lab_name = models.CharField(max_length=50, primary_key=True) 

    class Meta: 
     verbose_name_plural = 'LabNames' 

    def __unicode__(self): 
     return u'%s' % self.lab_name 


class Lab(models.Model): 
    name = models.ForeignKey(LabName) 
    start_hour = models.TimeField() 
    length = models.IntegerField(help_text="Given in minutes") 
    classDays = models.ManyToManyField(Day) 
    start_date = models.DateField() 
    finish_date = models.DateField() 
    max_cap = models.SmallIntegerField(help_text="Maximun number of students") 
    teacher = models.ForeignKey(User, related_name="Teachers") 
    students = models.ManyToManyField(User) 

    class Meta: 
     verbose_name_plural = 'Labs' 
    def __unicode__(self): 
     return u"%s %s" % (self.id, self.name) 

我寧願一個特定集團()稱爲「學生」比所有的用戶,而相關聯,或者至少過濾器和/或驗證這一領域,只是添加和查看學生也做同樣的用老師領域。

更新1:我剛剛注意到,也許我可以使用可選參數limit_choices_to篩選某些組中的用戶。

問題是: 如何使用limit_choices_to參數僅顯示那些在「學生」組或「教師」組中的用戶?

enter image description here

+1

我不是很瞭解你的問題。如果你可以詳細說明/給出例子(如你想要的功能的僞代碼),它會幫助我給你一個答案。 – 2011-03-14 21:38:28

+0

@Yuji,對不起,這是我的第一個問題,英文不是我的母語。也問題更新:) – razpeitia 2011-03-14 22:20:26

+0

它變得更容易,我認爲: 我剛剛編輯這部分: 'teacher = models.ForeignKey(User,related_name =「Teachers」,limit_choices_to = {'id__in':Group.objects 。所有()得到(NAME = '教師')。user_set.all()})' – razpeitia 2011-03-14 22:34:46

回答

2

嗯,看到了這是更清晰。

我會重新寫{'id__in' : Group.objects.all().get(name='Teachers').user_set.all()}

到: {'groups__name' : 'Teachers' }

另外,如果你想保持你的管理功能,從模型中分離更多(你知道管理員原本完全在模型? ),你可以使用formfield_for_foreignkey這肯定是一個很好的方式來保持你的模型與管理垃圾分開。

class MyModelAdmin(admin.ModelAdmin): 
    def formfield_for_foreignkey(self, db_field, request, **kwargs): 
     if db_field.name == "teacher": 
      kwargs["queryset"] = User.objects.filter(groups__name='Teacher') 
     if db_field.name == "students": 
      kwargs["queryset"] = User.objects.filter(groups__name='Student') 
     return super(MyModelAdmin, self).formfield_for_foreignkey(db_field, request, **kwargs)