Django Oscar - Variants - Part 25

In the previous part, we looked at product attributes. In this part, we will look at product variants.

Product variants are useful when we have different purchasable versions of the same product.

Think of the example:

  • Paperback
  • Hardcover
  • Signed edition

 

Attributes vs variants

Attributes describe the product.

Example:

Author: jaimedcsilva
Language: English
Number of pages: 250
Publication date: 2026-05-13

Variants represent different versions that the customer can buy.

Example:

Book
├── Paperback
├── Hardcover
└── Signed edition

 

Parent and child products

In Django Oscar, a product with variants is usually represented with one parent product and multiple child products.

Parent product:
- Django Oscar Book

Child products:
- Django Oscar Book - Paperback
- Django Oscar Book - Hardcover
- Django Oscar Book - Signed edition

The parent product groups everything together.

The child products are the actual products that can have stock records, prices and availability.

 

Creating variants

Go to:

Dashboard > Catalogue > Products

Create the main product first:

  • Title: Django Oscar Book
  • Structure: Parent

Then create the child products:

  • Django Oscar Book - Paperback
  • Django Oscar Book - Hardcover
  • Django Oscar Book - Signed edition

Each child product can have its own:

  • UPC
  • Stock record
  • Price
  • Availability

 

Book example

Django Oscar Book

Paperback
- Price: 19.99€
- Stock: 20

Hardcover
- Price: 29.99€
- Stock: 10

Signed edition
- Price: 49.99€
- Stock: 5

Each version can have a different price and stock quantity.

 

When to use variants

Use variants when the customer must choose one specific version of the product.

  • Paperback or Hardcover
  • Standard or Signed edition
  • Portuguese edition or English edition

Use attributes when you only want to describe the product.

  • Author
  • Number of pages
  • Publication date
  • Publisher

 

Simple rule

If it changes what the customer buys, use a variant.

If it only describes the product, use an attribute.