Django表单保存多个违反唯一完整性检查的记录

时间:2011-07-04 16:12:23

标签: django-forms

我有一个模型用于按季度存储足球比赛的得分:

class BoxScoreByQuarter( models.Model ):
    game_participant = models.ForeignKey( GameParticipant, verbose_name='game participant' )
    first_quarter = models.PositiveSmallIntegerField( blank=True, null=True, verbose_name='first quarter' )
    second_quarter = models.PositiveSmallIntegerField( blank=True, null=True, verbose_name='second quarter' )
    third_quarter = models.PositiveSmallIntegerField( blank=True, null=True, verbose_name='third quarter' )
    fourth_quarter = models.PositiveSmallIntegerField( blank=True, null=True, verbose_name='fourth quarter' )
    overtime = models.PositiveSmallIntegerField( blank=True, null=True, verbose_name='overtime' )
    final_score = models.PositiveSmallIntegerField( blank=True, null=True, verbose_name='final score' )

game_participant是GameParticipant模型的FK,每个参与者在游戏中不应该有多个BoxScoreByQuarter。

我的视图检查是否存在BoxScoreByQuarter并更新它或创建一个新的。

        try:
            initial_box = BoxScoreByQuarter.objects.get( game_participant=participant )
            box_score = BoxScoreByQuarterForm( submitted_data, instance=initial_box )
        except ObjectDoesNotExist:
            box_score = BoxScoreByQuarterForm( submitted_data )
            initial_box = None

        if box_score.is_valid():
            game_results = box_score.save()

出于某种原因,保存偶尔会导致给定参与者的两个甚至更多BoxScoreByQuarter记录。它不会一直发生,似乎没有任何模式。

是否有更可靠的方法来处理表单保存,以保证数据的完整性?

1 个答案:

答案 0 :(得分:1)

如果您每BoxScoreByQuarter只需要一个GameParticipant,那么您应该使用OneToOneField代替。