如何从UserProfile获取特定用户

时间:2014-01-10 14:15:34

标签: django django-models

我有以下模型类。

这是我的“用户”应用的UserProfile模型。它是Django(django.contrib.auth)用户应用程序的ProfileModel。

from django.db import models
from django.contrib.auth.models import User
from apps.programs.models import Program

class UserProfile(models.Model):
    user = models.ForeignKey(User, primary_key=True)
    USER_TYPES = (
        ('STUD', 'Students'),
        ('INST', 'Instructors'),
        ('ADV', 'Advisers'),
        ('BRAN', 'Branch Workers')
    )
    status = models.CharField(max_length=4, choices=USER_TYPES)
    program = models.ForeignKey(Program)
    phone_number = models.CharField(max_length=25, blank=True)

    def __unicode__(self):
        return u'%s %s %s' % (self.user, self.status, self.program)

这是我的“课程”应用程序的课程模型。

from django.db import models
from apps.programs.models import Program
from apps.users.models import UserProfile


class Course(models.Model):
    code = models.CharField(max_length=6, primary_key=True)
    id = models.PositiveIntegerField()
    name = models.CharField(max_length=60)
    course_language = models.CharField(max_length=3)
    credit = models.DecimalField(max_digits=10, decimal_places=1)
    schedule = models.CharField(max_length=30, blank=True)
    program = models.ForeignKey(Program)
    SEMESTER = (
        ('f', 'Fall Semester'),
        ('s', 'Spring Semester'),
        ('b', 'Both Semesters'))
    semester = models.CharField(max_length=1, choices=SEMESTER, blank=True)
    description = models.TextField(blank=True)

    def __unicode__(self):
        return self.name

这是我的“课程”应用程序的InstructorCourse模型,我将在那里存储一些由一些教师引导的课程。 “课程”字段与课程模型和具有UserProfile模型的“讲师”相关联。这就是问题所在。

class InstructorCourse(models.Model):
    course = models.ForeignKey(Course, name='course_name')
    instructor = models.ForeignKey(UserProfile, name='instructor_username')

    def __unicode__(self):
        return u"%s %s" % (self.course_name, self.instructor_name)

问题在于,当我尝试在管理员中添加教师时,我获得系统中的所有用户,因为教师字段采用UserProfile并获取所有用户。但这不是我想要的。我只需要用户使用UserProfile模型的'status'字段的'INST'值。愿有人帮帮我吗?我应该为InstructorCourse模型创建自己的Manager吗?或者我该怎么办?

1 个答案:

答案 0 :(得分:0)

如果我理解正确,您希望限制在InstructorCourse模型上设置讲师的选项。

我认为您可以通过在limit_choices_to={'status': 'INST'}模型中添加InstructorCourse等内容来实现此目的。

take a look at limit_choices_to from the django docs.

class InstructorCourse(models.Model):
    course = models.ForeignKey(Course, name='course_name')
    instructor = models.ForeignKey(UserProfile, name='instructor_username', limit_choices_to={'status': 'INST'})

    def __unicode__(self):
        return u"%s %s" % (self.course_name, self.instructor_name)