2015-09-04 111 views
0

我正在与非常有联系的关系一起努力。我想有这样的:具有多个值和多个所有者的Django字段

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 = [大象,卡车]

回答

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在其中一个模型中,描述或类别

然后你c乌尔德做到以下几点:

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相关的所有描述。

它将虽然返回一个QuerySet,不是

更多信息上ManyToManyField列表:

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

+0

你会建议我这样做与类模型,以及或者只是描述模型? – Rob

+1

@Rob现在更多信息 – dietbacon

+1

@Rob如果你已经试过这些代码,我忘了保存这些东西,你必须保存它。我现在修复它 – dietbacon