在django中动态添加ManyToMany相关对象

时间:2015-03-28 11:33:28

标签: django python-2.7 django-models django-forms django-views

假设我有两个模型:

class Property(models.Model):
    name= models.CharField('Property name', max_length=200)
    slug = models.CharField(max_length=200)

    def save(self, *args, **kwargs):
        if not self.id:
            self.slug= slugify(self.name)
        super(Tag, self).save(*args, **kwargs)


class Thing(models.Model):
    name = models.CharField('Name',max_length=200)
    description = models.TextField('Description')
    pub_date = models.DateTimeField('Pub date',default=datetime.now())
    properties = models.ManyToManyField(Property, blank=True)

当我创建一个新的Thing时,我希望能够创建新的相关属性,如果它们尚不存在。

就像,在ipotetically“ThingForm.save()”中,我想迭代所有选定的属性,创建不存在的属性并将它们链接到新的东西

我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:1)

这是您可以创建新属性并将其链接到Thing的方法:

# assuming you have a list of names of the selected properties
selected_properties = ['name_1', 'name_2']

for prop_name in selected_properties:
    property, created = Property.objects.get_or_create(name=prop_name)
    # assuming you already have a Thing instance (thing) to attach the properties to ...
    thing.properties.add(property)