Разделитель Foreignkey Django
Существует модель:
class Categories(models.Model):
name = models.CharField(max_length=150, unique=True, verbose_name='Name')
slug = models.SlugField(max_length=200, unique=True, blank=True, null=True, verbose_name='URL')
class Products(models.Model):
name = models.CharField(max_length=150, unique=True, verbose_name='Name')
slug = models.SlugField(max_length=200, unique=True, blank=True, null=True, verbose_name='URL')
category = models.ForeignKey(to=Categories, on_delete=models.PROTECT, verbose_name='Categoy')
Я не понимаю, как сделать так, чтобы в Products я мог писать category_id через запятую. То есть, чтобы у одного товара были разные категории. Есть ли какие-нибудь аргументы-разделители для Foreignkey? Для примера покажу свою идею на псевдокоде
category = models.ForeignKey(to=Categories, on_delete=models.PROTECT, separator=';')
Я думаю, что вам следует использовать ManyToManyField. Это создаст отношения "многие ко многим" между таблицами
Код примера:
class Category(models.Model):
name = models.CharField(max_length=150, unique=True, verbose_name='Name')
slug = models.SlugField(max_length=200, unique=True, blank=True, null=True, verbose_name='URL')
class Products(models.Model):
name = models.CharField(max_length=150, unique=True, verbose_name='Name')
slug = models.SlugField(max_length=200, unique=True, blank=True, null=True, verbose_name='URL')
categories = models.ManyToManyField(Category, verbose_name='Categoies)
Вы не . ForeignKey
относится (максимум) к одному предмету, поэтому по одному Categories
для каждого Product
.
If you need zero, one, or more categories, you use a ManyToManyField
[Django-doc], this works with a junction table [wiki], which is typically how you implement many-to-many relations in a relational database. This is indeed not a comma separated list, but that would probably not be a good idea anyway, since it essentially breaks first normal form (1NF) [wiki]:
class Category(models.Model):
name = models.CharField(max_length=150, unique=True, verbose_name='Name')
slug = models.SlugField(
max_length=200, unique=True, blank=True, null=True, verbose_name='URL'
)
class Product(models.Model):
name = models.CharField(max_length=150, unique=True, verbose_name='Name')
slug = models.SlugField(max_length=200, unique=True, blank=True, null=True, verbose_name='URL')
categories = models.ManyToManyField(Category, verbose_name='Categoies')
Note: Normally a Django model is given a singular name [django-antipatterns], so
Category
instead of.Categories