简体   繁体   中英

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. The problem is how could i post multiple category in one article? this is form.py below.

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:

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.
    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:

pip3 install 

and include 'taggit' to the INSTALLED_APPS list [Django-doc] :

# settings.py

INSTALLED_APPS = [
    # …,
    ,
    # …
]

Then in your models, you can add a TaggableManager to the model:

from django.db import models
from taggit.managers import 


class Article(models.Model):
    title = models.CharField(max_length=255)
    writing = models.TextField()
    categories = 
    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.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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