我有一个模型,用于按季度存储足球比赛的得分:
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记录。它并不是一直都在发生,而且似乎没有任何模式。
是否有更可靠的方式来处理表单保存,从而保证数据的完整性?
如果每个GameParticipant
只需要一个BoxScoreByQuarter
,那么应该使用OneToOneField
。