У меня возникли проблемы с сохранением формы в приложении 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})
Я удалил 'unique = True' и снова запустил его, и при попытке сохранить экземпляр модели набора данных все равно появляется та же ошибка. Кажется, что модель не соответствует стандартам модели mptt: super (MPTTModel, self) .save (* args, ** kwargs) –
, и я удалил db и снова запустил syncdb, btw –
Если u удалил db и удалил уникальный true я не вижу способ, которым вы можете получить эту ошибку. Btw только syncdb не будет работать. – Aldarund