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)
实现这一目标的最佳方法是什么?
拥有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)
| 归档时间: |
|
| 查看次数: |
3706 次 |
| 最近记录: |