2014-02-17 7 views
0

У меня возникли проблемы с сохранением формы в приложении Django. Я хочу создать модель под названием «набор данных» из другой модели под названием «образ», оба из которых являются моделями mptt.IntegrityError in django mptt - столбец не уникален

модели

class Image(MPTTModel): 
    name = models.CharField(max_length=50, unique=True) 
    parent = TreeForeignKey('self', null=True, blank=True, related_name='children') 

    def __unicode__(self): 
     return self.name 

class Dataset(MPTTModel): 
    name = models.CharField(max_length=50, unique=True) 
    image = TreeForeignKey(Image, null=True, blank=True, unique=True, related_name='image') 

    def __unicode__(self): 
     return self.name 

    class MPTTMeta: 
     parent_attr = 'image' 

Когда я пытаюсь сохранить Dataset, я получаю ошибку целостности:

IntegrityError at /associate/ 

column image_id is not unique 

Request Method:  GET 
Request URL: http://127.0.0.1:8000/associate/ 
Django Version:  1.6.2 
Exception Type:  IntegrityError 
Exception Value:  

column image_id is not unique 

Exception Location:  C:\Python27\lib\site-packages\django\db\backends\sqlite3\base.py in execute, line 450 

views.py

def index(request): 

    images = Image.objects.all() 
    datasets = [] 
    for i in images: 

     if i.rank() >= 3: 

      dataset = Dataset(image=i, name=i.name) 
      dataset.save() 
      datasets.append(dataset) 

    return render(request, 'associate/index.html', {'datasets':datasets}) 

def learn(request): 
    if request.method == 'POST': 
     try: 
      dataset = request.POST.get('dataset', False) 
      model = Dataset.objects.get(name=dataset) 
      if model: 
       print model.name 
      else: 
       print "no model" 
     except Dataset.DoesNotExist: 
      return render(request, 'associate/index.html') 
     else: 
      return render(request, 'associate/learn.html', {'dataset':model}) 

ответ

1

У вас есть уникальная = True в вашей модели Dataset для поле изображения. Это означает, что вы не можете назначить одно изображение для разных экземпляров набора данных. Но вы делаете это в своем индексе. В вашем индексе вы каждый раз пытаетесь создать новый набор данных для каждого изображения. Но если набор данных с этим изображением уже создан - вы получите ошибку «column image_id is not unique». Просмотрите свою логику приложения и удалите уникальную = True или перепишите поведение.

+0

Я удалил 'unique = True' и снова запустил его, и при попытке сохранить экземпляр модели набора данных все равно появляется та же ошибка. Кажется, что модель не соответствует стандартам модели mptt: super (MPTTModel, self) .save (* args, ** kwargs) –

+0

, и я удалил db и снова запустил syncdb, btw –

+0

Если u удалил db и удалил уникальный true я не вижу способ, которым вы можете получить эту ошибку. Btw только syncdb не будет работать. – Aldarund

 Смежные вопросы

  • Нет связанных вопросов^_^