Django模型中OneToOneField(unique=True)出现IntegrityError "异常:字段不是唯一的

0 投票
1 回答
2090 浏览
提问于 2025-04-17 00:27

我在models.py文件里有以下内容:

class Groups(models.Model):
  name = models.CharField(max_length=20)
  calls_lim = models.IntegerField(blank=True,null=True,max_length=2,unique=False)
  time_lim = models.IntegerField(max_length=4,blank=True,null=True,unique=False)
  ivr = models.OneToOneField(ivr,unique=False)

  def __unicode__(self):
    return u'%s' % (self.name)

class UserProfile(models.Model):
  user = models.OneToOneField(User)
  phone = models.IntegerField(max_length=12)
  group = models.OneToOneField(Groups,unique=False)
  msg_rcv = models.IntegerField(default=0,blank=True,null=True)
  msg_snt = models.IntegerField(default=0,blank=True,null=True)
  last_call = models.DateTimeField(blank=True,null=True)
  pin = models.IntegerField(max_length=6,blank=True,null=True)
  blacklist = models.BooleanField(default=False)

  def __unicode__(self):
    return u'%s' % (self.user)

当我尝试为UserProfile插入数据时,字段group出现了这个异常:

Exception Value: column group_id is not unique

这是views.py中的一段代码,导致了这个异常:

group = Groups.objects.get(name=str(form.cleaned_data['group']))
UserProfile.objects.create(user=User,phone='12345',group=group)

这是正常现象吗?用OneToOneField来处理group是不是不对?

谢谢!

1 个回答

0

直观上,我觉得用户和组之间是多对多的关系(一个用户可以加入多个组,而一个组也可以有多个用户)。如果是这样的话,就应该使用ManyToManyField。

但如果在你的情况中,一个用户只能属于一个组,那么用户和组之间就是一对多的关系,这样用户资料模型就需要有一个指向组的ForeignKey。

OneToOneField只用于两个模型之间的一对一关系。

可以参考 这个链接

撰写回答