0
我正在构建一个基本的CMS。我创建了一个组织应用程序,它为我的所有模型对象添加了一个带有外键的项目ID。该表单用于创建具有标题和文本的基本网站对象。我能够用下面的代码创建并保存一个实例。有不同的称呼失败,并进一步尝试“(1062,‘‘关键‘cms_page_url_117a950602ffab5c_uniq重复条目’’’)Django与unique_together外键和slug = slugify失败
现在我知道在那里我错了,可有人点我在正确的方向吗?我正在上。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)"