You
could do it exactly as written by introducing helping variables for the products and using AddMultiplicationEquality. This is the c# code, I don't have a Python version handy, but Python will be similar, the + and comparison operators are also overloaded but the method is called AddMultiplicationEquality instead of AddProdEquality.
const long domain = 100;
IntVar x11 = model.NewIntVar(0, domain, "x11");
IntVar x12 = model.NewIntVar(0, domain, "x12");
IntVar x13 = model.NewIntVar(0, domain, "x13");
IntVar x14 = model.NewIntVar(0, domain, "x14");
IntVar x21 = model.NewIntVar(0, domain, "x21");
IntVar x22 = model.NewIntVar(0, domain, "x22");
IntVar x23 = model.NewIntVar(0, domain, "x23");
IntVar x24 = model.NewIntVar(0, domain, "x24");
IntVar x11Sqr = model.NewIntVar(0, domain * domain, "x11Sqr");
IntVar x12Sqr = model.NewIntVar(0, domain * domain, "x12Sqr");
IntVar x13Sqr = model.NewIntVar(0, domain * domain, "x13Sqr");
IntVar x14Sqr = model.NewIntVar(0, domain * domain, "x14Sqr");
IntVar x11x21 = model.NewIntVar(0, domain * domain, "x11x21");
IntVar x12x22 = model.NewIntVar(0, domain * domain, "x12x22");
IntVar x13x23 = model.NewIntVar(0, domain * domain, "x13x23");
IntVar x14x24 = model.NewIntVar(0, domain * domain, "x14x24");
model.AddProdEquality(x11Sqr, new IntVar[] { x11, x11 });
model.AddProdEquality(x12Sqr, new IntVar[] { x12, x12 });
model.AddProdEquality(x13Sqr, new IntVar[] { x13, x13 });
model.AddProdEquality(x14Sqr, new IntVar[] { x14, x14 });
model.AddProdEquality(x11x21, new IntVar[] { x11, x21 });
model.AddProdEquality(x12x22, new IntVar[] { x12, x22 });
model.AddProdEquality(x13x23, new IntVar[] { x13, x23 });
model.AddProdEquality(x14x24, new IntVar[] { x14, x24 });
model.Add((x11Sqr + x12Sqr + x13Sqr + x14Sqr) > 0);
model.Add((x11x21 + x12x22 + x13x23 + x14x24) == 0);
I recall having read that there are some issues when the multiplicands span 0, i.e. have both negative and positive values so avoid this if possible.
But really, the first constraints are basically saying that at least one of the values is not 0, and the last (if you're not spanning 0) that at least one of each pair is zero. The solver would more easily find solutions if you introduced Booleans for these conditions and constrained them directly.