我是Django的新手,请原谅我的无知:)
假设我有一个具有几个外键关系的模型,当我创建模型的实例时,我希望它自动为外键对象生成新实例.在这种情况下,我将课程注册建模为一个组,我将特定组作为模型上的外键引用.
class Course(models.Model):
student_group = models.OneToOneField(Group, related_name="course_taken")
teacher_group = models.OneToOneField(Group, related_name="course_taught")
def clean(self):
if self.id:
try:
self.student_group
except Group.DoesNotExist:
self.student_group, _ = Group.objects.get_or_create(name='_course_' + self.id + '_student')
try:
self.teacher_group
except Group.DoesNotExist:
self.teacher_group, _ = Group.objects.get_or_create(name='_course_' + self.id + '_teacher')
Run Code Online (Sandbox Code Playgroud)
看起来我可以挂钩模型的干净方法来做到这一点,但我希望能够将整个事情包装在一个事务中,这样如果以后无法创建课程,它就赢了不要创建相关的Group对象.有没有办法实现这个目标?
另外,我在这里做错了吗?Django提供了更好的方法吗?