私は基本的なCMSを構築しています。私はすべてのモデルオブジェクトに外部キーを持つプロジェクトIDを追加する組織アプリを作成しました。このフォームは、ヘッダとテキストを含む基本的なウェブサイトオブジェクトを作成するためのものです。次のコードを使用して1つのインスタンスを作成して保存することができました。 "(1062、"重複するエントリ ''のキー 'cms_page_url_117a950602ffab5c_uniq' ")外部キーとslug = slugifyでunique_togetherを持つDjangoは失敗します
私は間違っていると思っています。誰かが正しい方向で私を指し示すことができますか? 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)"