我是 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')
似乎我可以使用模型的 clean 方法来执行此操作,但我希望能够将整个事情包装在一个事务中,这样如果它稍后无法创建课程,它就赢了'不创建相关的组对象。有什么办法可以做到这一点?
另外,我在这里做错了吗?Django 是否提供了更好的方法来做到这一点?