Как добавить несколько значений в поле с помощью ForeignKey (модели Django)?

У меня есть эти модели:

class Video(models.Model):
    category  = models.ForeignKey('Category', on_delete=CASCADE)

class Category(models.Model):
    category = models.CharField(max_length=100)

Ригт теперь мои объекты Video могут иметь только 1 выбранную категорию. Я хотел бы иметь возможность иметь несколько категорий для моего поля category. Возможно ли это с помощью ForeignKey?

i.e

НАСТОЛЬНОЕ ВИДЕО:

Video1.category = "драма", "ужас"

КАТЕГОРИЯ ТАБЛИЦЫ:

Категория1.категория = "драма"

Категория2.категория = "террор"

Модификация модели Video следующим образом:

class Video(models.Model):
    video = models.FileField(upload_to='video/%y")
    category = models.ManyToManyField('Category')

class Category(models.Model):
    category = models.CharField(max_length=100)

Я отображал информацию о своем объекте в панели администратора с этим классом в admin.py:

@admin.register(Video)
class VideoAdmin(admin.ModelAdmin):
    list_display = ('video', 'category')

Когда я изменил ForeignKey на ManyToManyField, я получил эту ошибку:

<class 'portfolio.admin.VideoAdmin'>: (admin.E109) The value of 'list_display[8]' не должно быть ManyToManyField.

Это произошло потому, что списки не поддерживаются list_display, чтобы исправить это, я создал метод внутри моего класса Video, чтобы вернуть строку, содержащую элементы списка. И заменил имя поля в list_display на имя метода.

Окончательный код:

models.py

class Video(models.Model):
        video = models.FileField(upload_to='video/%y")
        category = models.ManyToManyField('Category')
        
        def get_categories(self):
                return ", ".join([str(p) for p in self.category.all()])

class Category(models.Model):
        category = models.CharField(max_length=100)

Admin.py

@admin.register(Video)
class VideoAdmin(admin.ModelAdmin):
    list_display = ('video', 'get_categories')

admin.site.register(Category)
Вернуться на верх