Reputation: 8742
I have the following code in my models.py:
class Tag(models.Model):
name = models.CharField(max_length=75)
class Article(models.Model):
tags = models.ManyToManyField(Tag)
def save(self, *args, **kwargs):
for tag in self.tags:
print tag.name
super(Article, self).save(*args, **kwargs)
When I try to create an article from the admin panel, I get the following error:
ValueError: "<Article>" needs to have a value for field "id" before this many-to-many relationship can be used.
How can I fix this problem? I need to access and iterate the tags before saving the article. Thanks!
Upvotes: 9
Views: 8199
Reputation: 26914
Your models are bellow:
class Tag(models.Model):
name = models.CharField(max_length=75)
class Article(models.Model):
tags = models.ManyToManyField(Tag)
def save(self, *args, **kwargs):
for tag in self.tags:
print tag.name
super(Article, self).save(*args, **kwargs)
when you want to create a Article instance with tags, you should create the instance firstly, then add the tags
, like bellow:
article = Article.objects.create()
tags = [tag_instance1, tag_instance2, tag_instance3 ...]
article.tags.set(tags)
or
article.tags.add(tag_instance)
Upvotes: 1
Reputation: 39
Your Declaration of
form.save_m2m()
should be after
obj.save()
After saving of object Many to Many field will add
Upvotes: 3