最初の質問:
params = {'title': 'My entry 1', 'content': 'My content 1',
'tags': 'zinnia, test', 'slug': 'my-entry-1',
'status': PUBLISHED}
self.entry_1 = Entry.objects.create(**params)
self.entry_1.authors.add(self.authors[0])
self.entry_1.categories.add(*self.categories)
self.entry_1.sites.add(*self.sites)
Entry.objects.create(**params)
これは、「Entry.objects.create(title='My entry 1', content='My content 1', tags='zinnia, test', slug='my-entry-1', status='PUBLISHED'」と
同等です)、タイトルが「My entry 1」、コンテンツが「My content 1」の新しいエントリを作成し、データベースに保存します。ベース エントリ クラスは次のようになります。
class EntryAbstractClass(models.Model):
"""Base Model design for publishing entries"""
STATUS_CHOICES = ((DRAFT, _('draft')),
(HIDDEN, _('hidden')),
(PUBLISHED, _('published')))
title = models.CharField(_('title'), max_length=255)
image = models.ImageField(_('image'), upload_to=UPLOAD_TO,
blank=True, help_text=_('used for illustration'))
content = models.TextField(_('content'))
excerpt = models.TextField(_('excerpt'), blank=True,
help_text=_('optional element'))
tags = TagField(_('tags'))
categories = models.ManyToManyField(Category, verbose_name=_('categories'),
related_name='entries',
blank=True, null=True)
related = models.ManyToManyField('self', verbose_name=_('related entries'),
blank=True, null=True)
slug = models.SlugField(help_text=_('used for publication'),
unique_for_date='creation_date',
max_length=255)
authors = models.ManyToManyField(User, verbose_name=_('authors'),
related_name='entries',
blank=True, null=False)
そのため、 のような行はthroughself.entry_1.authors.add(self.authors[0]
に関連
self.athors[0]
します。self.entry_1
ManyToManyField
2 番目の質問については、はいform.html
、新しいエントリを追加するビュー機能を作成できますが、zinnia はコンテンツを管理するために Django 管理インターフェイスで使用するように設計されています。それはまたあなたの人生をずっと楽にしてくれるでしょう。それを使用するには、ファイルで有効'django.contrib.admin',
にINSTALLED_APPS
する必要があります。settings.py
urls.py
Django admin が有効になったら、に移動しexample.com/admin/
て新しいエントリを作成するだけです。
なんらかの理由で Django admin を使用しない、または使用できない場合、views.py
新しいエントリを追加すると次のようになります。
#views.py
from . import forms as entryform
from zinnia.models.entry import Entry
def add_entry(request):
form = entryform.EntryForm(request.POST or None)
if not (request.method == 'POST' and form.is_valid()):
return render_to_response("forms.html", {'form': form})
title = request.POST['title']
content = request.POST['content']
#...many more..
Entry.objects.create(title=title, content=content)
return render_to_response('success.html', {'form': form,})
forms.py
送信されたフォームを検証するために も作成する必要があることに注意してください。
forms.html
「タイトル」や「コンテンツ」など、必要なすべての入力を含むフォームを作成し、この
add_entry
ビューに投稿する必要があります。