django中的IntegrityError mptt - 列不唯一

时间:2014-02-17 22:27:11

标签: django sqlite django-mptt integrity

我在Django应用中保存表单时遇到问题。我想从另一个名为'image'的模型中创建一个名为'dataset'的模型,这两个模型都是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'

当我尝试保存数据集时,出现完整性错误:

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 个答案:

答案 0 :(得分:1)

图像字段的数据集模型中有唯一= True。这意味着您无法将一个图像分配给不同的数据集实例。但是你在索引中正在做它。在索引中,您每次都尝试为每个图像创建一个新数据集。但是,如果已经创建了具有此图像的数据集 - 您将获得此“列image_id不唯一”错误。请检查您的应用程序逻辑,并删除unique = True或重写行为。