我正在构建一个基本的CMS。我创建了一个组织应用程序,它将一个带有外键的项目ID添加到我的所有模型对象中。该表单用于创建带有标题和文本的基本网站对象。我能够使用以下代码创建并保存一个实例。使用不同标题的进一步尝试失败,并显示“(1062,”重复输入''用于键'cms_page_url_117a950602ffab5c_uniq'“)
我现在知道我哪里出错了,有人能指出我正确的方向吗?我在mysql数据库上运行。
型号:
class Page(models.Model):
title = models.CharField(max_length=100)
text = models.TextField(blank=True)
slug = models.SlugField()
date_created = models.DateTimeField(auto_now_add=True)
last_modified = models.DateTimeField(default=timezone.now)
project = models.ForeignKey(Project)
def __unicode__(self):
return "Page '%s' @: %s from %s" % (self.title, self.slug, self.project)
def __str__(self):
return unicode(self).encode('utf-8')
def save(self, *args, **kwargs):
self.slug = slugify(self.title)
super(Page, self).save(*args, **kwargs)
class Meta:
unique_together = (("project", "slug"),)
形式:
class PageForm(ModelForm):
def __init__(self, *args, **kwargs):
super(PageForm, self).__init__(*args, **kwargs)
for key, field in six.iteritems(self.fields):
field.widget.attrs['placeholder'] = field.label
class Meta:
model = Page
fields = ['title', 'text']
# TODO: ordering
title = forms.CharField(max_length=100, label=ugettext_lazy("Add a title"))
text = forms.CharField(label=ugettext_lazy("Type your text here"), widget=forms.Textarea)
def save(self, project, commit=True):
instance = super(PageForm, self).save(commit=False)
instance.project = project
if commit:
instance.save()
return instance
查看(CreateView):
class PagesCreateView(CreateView):
success_url = reverse_lazy('guiWeb')
form_class = PageForm
template_name = 'cms/page_create.html'
def form_valid(self, form):
project = Project.objects.get(id=self.request.session['authority'])
#Handle IntegrityError in view to avoid race condition.
try:
self.object = form.save(project=project)
except IntegrityError:
form.add_error('title', 'Page titles must be unique')
return self.form_invalid(form)
return HttpResponseRedirect(self.get_success_url())
这是最后一个错误陈述:
/usr/local/lib/python2.7/dist-packages/MySQL_python-1.2.4b4-py2.7-linux-x86_64.egg/MySQLdb/cursors.py in execute
self.errorhandler(self, exc, value)
...
▼ Local vars
Variable Value
args
[u'This is a new page 2',
u'dffjghk',
u'this-is-a-new-page-2',
u'2017-10-15 15:37:18',
u'2017-10-15 15:37:18',
4]
exc
<class '_mysql_exceptions.IntegrityError'>
self
<MySQLdb.cursors.Cursor object at 0x7faa0dbbbb10>
charset
'utf8'
db
<weakproxy at 0x7faa0db87aa0 to Connection at 0x7faa0844c330>
value
IntegrityError(1062, "Duplicate entry '' for key 'cms_page_url_117a950602ffab5c_uniq'")
r
None
query
"INSERT INTO `cms_page` (`title`, `text`, `slug`, `date_created`, `last_modified`, `project_id`) VALUES ('This is a new page 2', 'dffjghk', 'this-is-a-new-page-2', '2017-10-15 15:37:18', '2017-10-15 15:37:18', 4)"
答案 0 :(得分:0)
好的,我在系统中有一个不完整的迁移......我应该从信息中清楚地看到&#34; cms_page_url&#34;。在模型的先前版本中,我在我的模型中有一个名为url的uniq字段,我将其删除。由于迁移不完整,因此仍然在数据库中并抛出错误。 (IntegrityErrors来自底层数据库,而不是django)。
我希望我的推理和上述代码对未来的人仍然有用。