创建模型时使用外键自动创建模型 - 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。我不建议覆盖保存方法。
我正在我的网页上创建一个评论部分,并希望用户能够对评论投赞成票或反对票。
我的模型是这样的:
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。我不建议覆盖保存方法。