IntegrityError «Исключение: поле не уникально» для OneToOneField с unique = True в моделях django - PullRequest
0 голосов
/ 28 августа 2011

У меня есть следующее в 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 голосов
/ 30 августа 2011

Интуитивно я бы сказал, что группы и пользователи имеют отношения многие ко многим (пользователь может быть частью многих групп, а группа может состоять из множества пользователей).Если это так, используйте взамен ManyToManyField.

Если в вашем случае пользователь может входить только в одну группу, отношение «группа-пользователь» является одним ко многим, и поэтому модель UserProfile должна иметь ForeignKeyв группу.

OneToOnefield используется ТОЛЬКО для отношений один к одному между двумя моделями.

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

...