对于在django模型中具有唯一= True的OneToOneField,IntegrityError“异常:字段不是唯一的”

时间:2011-08-27 21:56:17

标签: python django django-models

我在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执行插入时,字段组会抛出此异常

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用于组是否有误?

由于

1 个答案:

答案 0 :(得分:0)

直觉上我认为群组和用户有多对多的关系(用户可以是许多群组的一部分,一个群组可以由许多用户组成)。如果是这种情况,请改用ManyToManyField。

如果在您的情况下,用户只能属于一个组,则组用户关系是一对多,因此UserProfile模型需要将ForeignKey分组。

OneToOnefield仅用于两个模型之间的一对一关系。

参考https://docs.djangoproject.com/en/dev/ref/models/fields/#module-django.db.models.fields.related