创建模型时使用外键自动创建模型 - Django

Auto-create model with foreign key when model is created - Django

我正在我的网页上创建一个评论部分,并希望用户能够对评论投赞成票或反对票。

我的模型是这样的:

class Comment(models.Model):
    owner = models.ForeignKey(User)
    body = models.TextField(null=True, blank=True, max_length=500)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)


class Vote(models.Model):
    comment = models.ForeignKey(Comment)
    upvote = models.SmallIntegerField(null=True, blank=True, default=0)
    downvote = models.SmallIntegerField(null=True, blank=True, default=0)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

当用户发表评论时,我希望它也创建一个链接到该评论的投票模型。

我是 django 和编程的新手,但根据我的理解,我需要创建一个保存挂钩或类似的东西吗?

可以覆盖Comment模型的save()方法,即:

class Comment(models.Model):
    ...
    def save(self, **kwargs):
        super(Comment, self).save(**kwargs)
        vote = Vote(comment=self)
        vote.save()

我建议您阅读 documentation 以获得更好的见解。

考虑这段代码:

class ModelA(models.Model):
    name = models.CharField(max_length=30)

    @classmethod
    def get_new(cls):
        return cls.objects.create().id



class ModelB(models.Model):
    thing = models.OneToOneField(ModelA, primary_key=True, default=ModelA.get_new)
    num_widgets = IntegerField(default=0)

当然你也可以使用lambda,只要你return相关对象的整数id。我不建议覆盖保存方法。