Как добавить несколько значений в поле с помощью 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)