我有以下代码:
class Album(models.Model):
name = models.CharField(max_length=255, unique=True, null=False)
rating = models.ForeignKey("Rating", null=False)
class Rating(models.Model):
value = models.IntegerField(null=False, default=0)
(在 django/python 哲学中)创建对象(相册)及其子对象(评级)并保存它的最佳方法是什么?
我已经这样做了:
a = Album()
a.name = "..."
r = Rating()
r.save()
a.rating = r
a.save()
我不喜欢这个,因为创建空子对象的部分完全没有用。 我更喜欢像这样的简单方法 - 应该自动创建子对象:
a = Album()
a.name = "..."
a.save()
最佳答案
您需要查看 signals
.
本质上是在保存对象时发送信号。
使用 pre_save
发出信号后,您可以创建一个评分
,并将其关联到新的专辑
,然后再首次保存。
from django.db.models.signals import pre_save
from django.dispatch import receiver
from myapp.models import Album, Rating
@receiver(pre_save, sender=Album)
def add_rating_to_album(sender, **kwargs):
# If saving a new Album
if not instance.id:
# Create and save a new rating
rating = Rating()
rating.save()
# Associate it to the Album being saved
instance.rating = rating
# Continue to normal save with new rating applied
我还没有测试过这个特定的代码,但它应该能让您找到正确的方向
关于Django - 创建对象和子对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14402375/