我可以将经理添加到多人关系中吗?

Joe*_*tar 5 django django-models manytomanyfield

我有两个模型在某种程度上与'through'表有很多关系吗?

class Bike(models.Model):
   nickname = models.CharField(max_length=40)
   users    = models.ManyToManyField(User, through='bike.BikeUser')
Run Code Online (Sandbox Code Playgroud)

BikeUser类

class BikeUser(models.Model):
   bike     = models.ForeignKey(Bike)
   user     = models.ForeignKey(User)
   comment  = models.CharField(max_length=140)
Run Code Online (Sandbox Code Playgroud)

我想为Bike类添加功能以便与用户合作,是否有最佳实践方法.我想避免在Bike类中添加太多方法,而是让某种管理器可以完成

就像是:

bike.bikeusers_set.commonMethod()
Run Code Online (Sandbox Code Playgroud)

要么

bike.bikeusers.commonMethod()
Run Code Online (Sandbox Code Playgroud)

实现这一目标的最佳方法是什么?

Ome*_*tel 6

拥有BikeUser模型后,您可以向模型添加自定义管理器.

就像是:

class BikeUserManager(models.Manager):
    def commonMethod():
        pass

class BikeUser(models.Model):
   bike     = models.ForeignKey(Bike)
   user     = models.ForeignKey(User)
   comment  = models.CharField(max_length=140)
   objects  = BikeUserManager()
Run Code Online (Sandbox Code Playgroud)

但是你只能在BikeUser模型中使用它:

BikeUser.objects.commonMethod()
Run Code Online (Sandbox Code Playgroud)

您想要的是将此经理用作相关经理:http: //docs.djangoproject.com/en/dev/topics/db/managers/#controlling-automatic-manager-types

添加use_for_related_fields=True到manager类.

class MyManager(models.Manager):
    use_for_related_fields = True
Run Code Online (Sandbox Code Playgroud)