0

私はCreateViewでフォームを生成します:

#urls.py
url(r'^add/$', ServerAdd.as_view(template_name="add.html")),

#views.py
from django.views.generic import CreateView
from servers.models import Server

class ServerAdd(CreateView):
model = Server
success_url = '/index/'

models.py と add.html
すべて正常に動作しますが、サイトでslugを入力する必要があります。そして今、質問: 管理パネルのように自動的にスラッグを生成するにはどうすればよいですか?

私は初心者なので、ステップバイステップの説明をお願いします

4

2 に答える 2

4

上記の回答は、インスタンスが保存されるたびに新しいスラッグを生成することに注意してください。これは、ブックマークされた URI が無効になるため、(たとえば URI の一部として) 共有されることになるものには悪い習慣です。

より完全な答えは、Django でスラッグを作成するにはどうすればよいですか? です。.

于 2013-11-06T22:09:54.017 に答える
1

このdjango スニペットを使用して、各アイテムに固有のスラッグを作成するのが好きです。そうすれば、同じ名前のアイテムが複数ある場合、 と のようにインクリメントさitem-1れますitem-2。スニペットのコードを というファイルに保存しますslug.py。models.py で、slug ファイルをインポートします。次に、モデル クラスを定義した後、以下saveを使用してメソッドをオーバーライドしunique_slugifyます。

from myapp.slug import unique_slugify

class Server(models.Model):
    name = models.Charfield(max_length=20)
    ....

    def save(self, **kwargs):
        slug = '%s' % (self.name)
        unique_slugify(self, slug)
        super(Server, self).save()

nameこれにより、サーバー モデルのフィールドに基づいてスラッグが作成されます。別のフィールドからスラッグを作成するには、別の値をmodulus (%)オペレーターに渡します。

于 2013-01-11T17:54:39.123 に答える