具有多个值和多个所有者的 Django 字段
Django field with multiple values and multiple owners
我正在为一个非常紧密的关系的概念而苦苦挣扎。我想要类似的东西:
class Category(models.Model):
name = models.CharField(max_length=128, unique=True)
descriptions = models.Listfield? #or something like this
class Descriptions(models.Model):
name = models.CharField(max_length=128, unique=True)
categories = models.Listfield? #or something like this
我们的想法是,类别将具有您可以单击的描述,这将为您提供具有该描述的类别列表,反之亦然。所以如果类别是 [Elephant, Truck, Tree] 而描述是 [Heavy, Trunk],我希望它设置为 Elephant.descriptions = [Heavy, Trunk] 和 Heavy.categories = [Elephant , 卡车]
您可以使用 ManyToManyField
,因为它是多对多关系(一个类别可以与多个描述关联,一个描述可以与多个类别关联
class Category(models.Model):
name = models.CharField(max_length=128, unique=True)
class Description(models.Model):
name = models.CharField(max_length=128, unique=True)
categories = models.ManyToManyField(Category, blank=True)
使用此方法,您只需在其中一个模型(描述或类别)中添加 ManyToManyField
。
然后您可以执行以下操作:
new_cat = Category(name = 'cat1')
new_cat.save()
new_desc = Description(name = 'desc1')
new_desc.save()
new_desc.categories.add(new_cat)
并且它们将相互关联,不需要 Category
模型中的 ManyToManyField
然后您可以通过以下方式访问与 new_desc
关联的所有类别:
new_desc.categories.all()
或
new_cat.description_set.all()
所有与 new_cat 关联的描述。
它将 return 一个查询集,而不是一个列表
关于 ManyToManyField
的更多信息:
https://docs.djangoproject.com/en/1.8/topics/db/examples/many_to_many/
我正在为一个非常紧密的关系的概念而苦苦挣扎。我想要类似的东西:
class Category(models.Model):
name = models.CharField(max_length=128, unique=True)
descriptions = models.Listfield? #or something like this
class Descriptions(models.Model):
name = models.CharField(max_length=128, unique=True)
categories = models.Listfield? #or something like this
我们的想法是,类别将具有您可以单击的描述,这将为您提供具有该描述的类别列表,反之亦然。所以如果类别是 [Elephant, Truck, Tree] 而描述是 [Heavy, Trunk],我希望它设置为 Elephant.descriptions = [Heavy, Trunk] 和 Heavy.categories = [Elephant , 卡车]
您可以使用 ManyToManyField
,因为它是多对多关系(一个类别可以与多个描述关联,一个描述可以与多个类别关联
class Category(models.Model):
name = models.CharField(max_length=128, unique=True)
class Description(models.Model):
name = models.CharField(max_length=128, unique=True)
categories = models.ManyToManyField(Category, blank=True)
使用此方法,您只需在其中一个模型(描述或类别)中添加 ManyToManyField
。
然后您可以执行以下操作:
new_cat = Category(name = 'cat1')
new_cat.save()
new_desc = Description(name = 'desc1')
new_desc.save()
new_desc.categories.add(new_cat)
并且它们将相互关联,不需要 Category
模型中的 ManyToManyField
然后您可以通过以下方式访问与 new_desc
关联的所有类别:
new_desc.categories.all()
或
new_cat.description_set.all()
所有与 new_cat 关联的描述。
它将 return 一个查询集,而不是一个列表
关于 ManyToManyField
的更多信息:
https://docs.djangoproject.com/en/1.8/topics/db/examples/many_to_many/