Джанго Аут группа модель м2м - PullRequest
0 голосов
/ 14 марта 2011

Недавно я работал в общей системе надписей, чтобы помочь студентам зарегистрироваться в классе или лаборатории.Но у меня есть проблемы с логикой ManyToManyField в классе Lab.

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)

Я бы предпочел связать определенную группу (django.contrib.auth.models.Group) под названием «Студенты», а не всех пользователей или, по крайней мере, отфильтровать и/ или подтвердите это поле, чтобы просто добавить и просмотреть учащихся, а также сделать то же самое с полем учителя.

Обновление 1: Я только что заметил, что, возможно, я мог бы отфильтровать тех пользователей, которые находятся вопределенная группа, использующая необязательный параметр limit_choices_to.

Вопрос: как я могу использовать параметр limit_choices_to, чтобы отображать только тех пользователей, которые входят в группу «Студенты» или «Учителя»?

enter image description here

1 Ответ

2 голосов
/ 15 марта 2011

Ах, видите, это намного яснее.

Я бы переписал {'id__in' : Group.objects.all().get(name='Teachers').user_set.all()}

в: {'groups__name' : 'Teachers' }

Кроме того, если вы хотите, чтобы функциональность администратора была отделена от ваших моделей болеезнаете, Admin изначально был полностью в моделях?), вы можете использовать formfield_for_foreignkey , что, безусловно, является хорошим способом отделить ваши модели от нежелательной админки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...