外键 Django 分隔符

问题描述 投票:0回答:2

有型号:

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')

我不明白如何制作它,以便在产品中我可以编写以逗号分隔的category_id。也就是说,一种产品会有不同的类别。外键有分隔符参数吗?例如,我将用伪代码展示我的想法

category = models.ForeignKey(to=Categories, on_delete=models.PROTECT, separator=';')
python-3.x django postgresql orm psql
2个回答
0
投票

我认为你应该使用ManyToManyField。这将在表之间创建多对多关系

示例代码:

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')
    categories = models.ManyToManyField(Categories)

0
投票

。一个

ForeignKey
指(至多)一项,因此每个
Categories
对应一个
Product

如果您需要零个、一个或多个类别,则可以使用

ManyToManyField
 [Django-doc],这适用于 连接表 [wiki],这通常是如何您在关系数据库中实现多对多关系。这确实不是一个逗号分隔的列表,但这可能不是一个好主意,因为它本质上破坏了第一范式(1NF) [wiki]

© www.soinside.com 2019 - 2024. All rights reserved.