简体   繁体   English

在 Django 中传递多个参数

[英]Pass multiple parameters in Django

class Article(models.Model):
      Title     = models.CharField(max_length = 255)
      writing       = models.TextField()
      category  = models.CharField(max_length = 225)
      published = models.DateTimeField(auto_now_add=True)
      updated       = models.DateTimeField(auto_now=True)
      slug      = models.SlugField(blank=True, editable=False)

      def save(self):
         self.slug = slugify(self.Title)
         super().save()

      def get_absolute_url(self):
         url_slug = {'slug':self.slug}
         return reverse('artikel:ArticleDetail', kwargs = url_slug)

      def __str__(self):
         return "{}.{}".format(self.id, self.Title)

i want to build a simple website using django where it could post some articles by form.我想使用 django 建立一个简单的网站,它可以通过表格发布一些文章。 The problem is how could i post multiple category in one article?问题是我如何在一篇文章中发布多个类别? this is form.py below.这是下面的form.py。

from .models import Article
from django.forms import ModelForm 

class ArticleForm(ModelForm):
   class Meta:
      model = Article
      fields = [
        'title',
        'writing',
        'category',
       ]

You can a ManyToManyField to link your post to multiple categories, for example:您可以使用ManyToManyField将您的帖子链接到多个类别,例如:

class Category(models.Model):
    name = models.CharField(max_length=128, unique=True)

    def __str__(self):
        return self.name

class Article(models.Model):
    title = models.CharField(max_length=255)
    writing = models.TextField()
    category = models.ManyToManyField(Category)
    published = models.DateTimeField(auto_now_add=True)
    updated = models.DateTimeField(auto_now=True)
    slug = models.SlugField(blank=True, editable=False)

    def save(self, *args, **kwargs):
        self.slug = slugify(self.title)
        super().save()

    def get_absolute_url(self):
        return reverse('artikel:ArticleDetail', kwargs={'slug': self.slug})

      def __str__(self):
         return '{}.{}'.format(self.id, self.title)

That being said, there already are some packages for this.话虽这么说,已经有一些包。 django-taggit [GitHub] for example, you can install this with:例如, django-taggit [GitHub] ,您可以使用以下命令安装它:

pip3 install django-taggit

and include 'taggit' to the INSTALLED_APPS list [Django-doc] :并将'taggit'包含到INSTALLED_APPS列表 [Django-doc] 中

# settings.py

INSTALLED_APPS = [
    # …,
    'taggit',
    # …
]

Then in your models, you can add a TaggableManager to the model:然后在您的模型中,您可以将TaggableManager添加到 model:

from django.db import models
from taggit.managers import TaggableManager


class Article(models.Model):
    title = models.CharField(max_length=255)
    writing = models.TextField()
    categories = TaggableManager()
    published = models.DateTimeField(auto_now_add=True)
    updated = models.DateTimeField(auto_now=True)
    slug = models.SlugField(blank=True, editable=False)

    def save(self, *args, **kwargs):
        self.slug = slugify(self.title)
        super().save()

    def get_absolute_url(self):
        return reverse('artikel:ArticleDetail', kwargs={'slug': self.slug})

      def __str__(self):
         return '{}.{}'.format(self.id, self.title)

As the documentation specifies, it comes with a form field that allows one to write space-separated and comma-separated tags.正如文档所指定的,它带有一个 表单字段,允许编写空格分隔和逗号分隔的标签。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM