• 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏吧

Django验证组模型m2m

python 来源:razpeitia 5次浏览

最近,我一直在使用通用题注系统来帮助学生在课堂或实验室注册。但是我在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


===========解决方案如下:

嗯,看到了这是更清晰。

我会重新写{'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) 

版权声明:本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系管理员进行删除。
喜欢 (0)