多对多关系的额外字段

一.业务需求

类似博客的项目,应该是有关注功能的,一个用户可以关注多个用户,也可以被多个用户关注,我们需要在这种关系上添加一个额外的字段表示用户关注用户的时间,这时候可以用到Django的中介模型.

from django.contrib.auth.models import User
class Contact(models.Model):
       user_from = models.ForeignKey(User,
                                     related_name='rel_from_set')
       user_to = models.ForeignKey(User,
                                   related_name='rel_to_set')
       created = models.DateTimeField(auto_now_add=True,
                                      db_index=True)

正常情况下,我们可以在多对多模型的一段使用ManyToManyField字段来创建关系,用through指定中介模型,用symmetrical指定非对称关系,FALSE表示如果我关注了你,你不会自动的关注我,由于User是内置模型,我们需要用到

猴子补丁monkey-patch去在程序运行时给用户添加字段

User.add_to_class('following',
                   models.ManyToManyField('self',
                                          through=Contact,
                                          related_name='followers',
                                          symmetrical=False))

当你使用了一个中介模型(intermediate model)给多对多关系,一些关系管理器的方法将不可用,例如:add()create()以及remove()。你需要创建或删除中介模型(intermediate model)的实例来代替。

 

,

 

转载于:https://www.cnblogs.com/hhy-love-python/p/8509391.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值