Django字段具有多个值和多个所有者

时间:2015-09-04 23:41:25

标签: python django list data-structures models

我正在努力与这个概念建立联系。我希望有类似的东西:

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.descriptions = [Heavy,Trunk]和Heavy.categories = [大象,卡车] < / p>

1 个答案:

答案 0 :(得分:1)

您可以使用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)

并且它们会彼此关联,而ManyToManyField模型中不需要Category

然后,您可以访问与new_desc相关联的所有类别:

new_desc.categories.all()

new_cat.description_set.all()

表示与new_cat相关的所有描述。

它将返回QuerySet,而不是列表

有关ManyToManyField的更多信息:

https://docs.djangoproject.com/en/1.8/topics/db/examples/many_to_many/