def save(self, user): d = self.cleaned_data authors = [user] if 'coauthor1' in d: authors.append(d['coauthor1']) if 'coauthor2' in d: authors.append(d['coauthor2']) if 'coauthor3' in d: authors.append(d['coauthor3']) paper = Paper() paper.save() paper.authors.add(user) for coauthor in d['coauthors']: paper.authors.add(coauthor) paper.save() d['contents'].name = '%030x' % random.randrange(16**30) + ".pdf" paper_version = PaperVersion( paper = paper, title = d['title'], abstract = d['abstract'], contents = d['contents'], ) paper_version.save() # need to save paper twice since paper and paper_version point to each other... paper.latest_version = paper_version paper.save() for conflict_username in d['conflicts']: ra = ReviewAssignment() ra.user = User.objects.get(username=conflict_username) ra.paper = paper ra.type = 'conflict' ra.save() return paper