0

I have a website where I want to display a basic html table like so:

Product_Name | Attribute_1 | Attribute_2
----------------------------------------- 
Soap         | True        | True 
Shampoo      | False       | True

So I have created the classes Product and Attribute with a ManyToMany relationship.

Models.py

class Product(models.Model):
    name = models.CharField(max_length=10)
    attributes = models.ManyToManyField(on_delete='CASCADE')

class Attribute(models.Model):
    name = models.CharField(max_length=1, default='N')

So I have two Attribute instances - Attribute_1 and Attribute_2.

When I create a new attribute (Attribute_3), is there a way I can update the relationships of all of my Product instances with a link to the new Attribute?

I know that Django creates a through table for m2m relationships. According to the docs, I know I can do something like:

for prod_obj in Product.objects.all(): prod_obj.add(new_attribute_object)

But how do I ensure this happens automatically/consistently every time I create an attribute object?

ron_g
  • 1,474
  • 2
  • 21
  • 39

1 Answers1

1

You should write a custom save method for your Attribute model that a) checks to see whether the Attribute object is being created for the first time; and b) if so, adds that Attribute to each Product in your database. For more information on writing a custom save method, see this post.

Sam
  • 1,952
  • 1
  • 18
  • 31