我正在我的网页上发表评论部分,希望用户能够对评论进行投票或投票。
我的模型是这样的:
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和编程的新手,但从我的理解,我需要创建一个保存钩子或类似的东西?
答案 0 :(得分:5)
您可以覆盖save()
模型的Comment
方法,即:
class Comment(models.Model):
...
def save(self, **kwargs):
super(Comment, self).save(**kwargs)
vote = Vote(comment=self)
vote.save()
我建议您阅读documentation以获得更好的见解。
答案 1 :(得分:1)
考虑以下代码:
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,只要你返回相关对象的整数id即可。我不建议覆盖保存方法。