• 多对多关系的额外字段


    一.业务需求

    类似博客的项目,应该是有关注功能的,一个用户可以关注多个用户,也可以被多个用户关注,我们需要在这种关系上添加一个额外的字段表示用户关注用户的时间,这时候可以用到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)的实例来代替。

    ,

  • 相关阅读:
    【备忘】(可持久化)线段树
    和别人一起搞的模拟赛 (1) 题解
    和别人一起搞的模拟赛 (1) 题面
    【讲课】基础的数论知识
    斐波那契
    luogu P6222
    luogu P4240
    二分图网络流做题记录
    ds 瞎做
    P6943 [ICPC2018 WF]Conquer The World 解题报告
  • 原文地址:https://www.cnblogs.com/hhy-love-python/p/8509391.html
Copyright © 2020-2023  润新知