django 一对多重写save方法
时间: 2023-08-04 22:38:44 浏览: 110
在 Django 中,重写模型的 `save` 方法可以实现在保存模型实例时自定义一些行为。对于一对多关系,你可以在子模型中重写 `save` 方法来实现一些自定义的行为。
以下是一个重写 `save` 方法的示例,其中一个 `Author` 模型有一个一对多关系的子模型 `Book`:
```python
from django.db import models
class Author(models.Model):
name = models.CharField(max_length=50)
def __str__(self):
return self.name
class Book(models.Model):
title = models.CharField(max_length=100)
author = models.ForeignKey(Author, on_delete=models.CASCADE)
def __str__(self):
return self.title
def save(self, *args, **kwargs):
# 在保存 Book 实例之前执行某些操作
self.title = self.title.upper()
super(Book, self).save(*args, **kwargs)
# 在保存 Book 实例之后执行某些操作
print('Book instance saved')
```
在上面的示例中,我们在 `Book` 模型中重写了 `save` 方法,将 `title` 属性转换为大写并保存。当你在视图中创建 `Book` 实例并保存时,Django 将会自动调用我们重写的 `save` 方法:
```python
from django.shortcuts import render
from .models import Author, Book
def my_view(request):
author = Author.objects.create(name='John Doe')
book = Book.objects.create(title='The Catcher in the Rye', author=author)
return render(request, 'my_template.html', {'book': book})
```
当你执行上面的代码时,Django 将会在保存 `book` 实例时自动调用 `save` 方法,并执行我们定义的自定义行为。
阅读全文