Django - 创建对象和子对象

标签 django

我有以下代码:

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/

相关文章:

python - 如何获得图像/超链接格式的聊天机器人响应?

python - “No URL to redirect to” 如何重定向到django同一页面

django - Django 模板中的循环 : how to control the loop iterator?

python - Django-filter 和 Django-tables2 使用外部属性

python - Django Zinnia 平台入门

Django:密码重置电子邮件主题行包含“example.com”

Apache 和 mod_wsgi 中的 Django 自定义错误处理程序

python - Django - 如何根据多个字段编辑数据库中的特定行?

ios - 具有 Django 后端的 IOS 应用程序的用户帐户

python - Django:限制非登录用户访问静态文件夹