我正在尝试使用 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
我们希望 B
和 C
都引用原始父级 A
,例如:
A <--- B
^
'-- C
因此,如果您想转发 parent_object
ect,它首先会检查它是否是转发。如果是这种情况,它会获取该推文的父推文。如果推文没有父级,我们可以将其用作父级。
如果我们每次都这样做,那么检查一个父级就足够了,因为一条推文永远不会有“祖 parent ”。
关于python - 有人可以解释一下以下 Django 代码背后的逻辑吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57649984/