Skip to main content
 首页 » 编程设计

python之有人可以解释以下 Django 代码背后的逻辑吗

2024年08月13日46cloudgamer

我正在尝试使用 github 上的教程在 python 和 django 1.10 中编写一个 Twitter 克隆。但是我已经通过了一些 ModelManager 类,我无法理解逻辑,尤其是在第一个 if 语句中。

class TweetManager(models.Manager): 
 
    def retweet(self, user, parent_obj): 
        if parent_obj.parent: 
            og_parent = parent_obj.parent 
        else: 
            og_parent = parent_obj 
 
        obj = self.model( 
                parent = og_parent, 
                user = user, 
                content = parent_obj.content, 
            ) 
        obj.save() 
 
        return obj 
 
 
class Tweet(models.Model): 
    parent      = models.ForeignKey("self", blank=True, null=True) 
    user        = models.ForeignKey(settings.AUTH_USER_MODEL) 
    content     = models.CharField(max_length=140, validators= [validate_content]) 
    updated     = models.DateTimeField(auto_now=True) 
    timestamp   = models.DateTimeField(auto_now_add=True) 
 
    objects = TweetManager() 

请您参考如下方法:

它可以防止创建父级的链。想象一下,您有一条推文 A 并且被转发,推文 B,那么我们不想创建一条推文 C 与:

A <--- B <-x- C 

我们希望 B 和 C 都引用原始父级 A,例如:

A <--- B 
^ 
'-- C 

因此,如果您想转推 parent_obj 等,它首先会查看它是否是转推。如果是这样,它将获得该推文的父级。如果推文没有父级,我们可以将其用作父级。

如果我们每次都这样做,那么检查一个父级别就足够了,因为一条推文永远不会有“祖 parent ”。