(Django)如何将limits_choices_设置为ManyToManyField指向的另一个类?

时间:2012-03-14 23:04:39

标签: django django-models

我目前有三个课程UserUserProfileVendorUser是来自from django.contrib.auth.models import User的内置Django。其他两个如下

以下是UserProfile

class UserProfile( models.Model ) :
    TYPE_CHOICES = (
        ( 't', 'tenant'           ),
        ( 'm', 'property manager' ),
        ( 'o', 'property owner'   ),
        ( 'v', 'vendor'           ),
        ( 'w', 'web user'         ),
        ( 'x', 'other'            ),
    )
    user      = models.ForeignKey( User, unique = True )
    user_type = models.CharField( max_length = 1, choices = TYPE_CHOICES, default = 't' )

User.profile = property( lambda u : UserProfile.objects.get_or_create( user = u )[ 0 ] )

这里是Vendor

class Vendor( models.Model ) :
    def __unicode__( self ) :
        return self.name

    name  = models.CharField( max_length = 135 )
    users = models.ManyToManyField( User, null = True, blank = True )

我想将Vendor.users仅限制为UserUserProfile.user_type的{​​{1}}。

如何使用limit_choices_to。我能做点像......

vendor

我知道上面的代码会引发错误,但希望你能看到我正在尝试做的事情。

提前致谢!

1 个答案:

答案 0 :(得分:1)

我能够用

做到这一点
manager = models.ForeignKey( User, related_name = 'manager', limit_choices_to = { 'userprofile__user_type' : 2 } )

其中2是user_type_id类中属性管理器的主键(UserType)。