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

标签 python django

我正在尝试使用 github 上的教程编写一个 Twitter 克隆(在 python 和 django 1.10 中)。但是我已经通过了一些 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()

最佳答案

它可以防止给 parent 造成束缚。想象一下,您有一条推文 A,并且被转发了一条推文 B,那么我们不想想要创建一条推文 C 与:

A <--- B <-x- C

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

A <--- B
^
'-- C

因此,如果您想转发 parent_objectect,它首先会检查它是否是转发。如果是这种情况,它会获取该推文的父推文。如果推文没有父级,我们可以将其用作父级。

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

关于python - 有人可以解释一下以下 Django 代码背后的逻辑吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57649984/

相关文章:

django - 在 Django 中四舍五入小数

Python Web 应用程序设置

python - qpushbutton 图标左对齐文本居中对齐

python - 如何在 scikit learn 中为 cross_validate 制定自定义评分指标?

css - Django 不会显示静态文件

django - 在 Django 中使用嵌入式 Iframe?

django - 寻找提供 django 模板的资源

python - 如何改变敌方 Sprite 的速度?

python - 是否可以限制用户每天可以使用 Django postman 发送的消息数量?

python - json schema Draft 7 python 中的多种自定义类型