Держите слизняков уникальными, когда они зависят от другого слизняка - PullRequest
0 голосов
/ 20 апреля 2020

На моей веб-странице есть несколько URL-адресов, подобных этому, /<slug1>/<slug2>/slug3>/, где слагы относятся к разным моделям соответственно.

В принципе, я не могу допустить повторения slug1 в любой момент, и это просто, я просто буду использовать unique_slugify.

Однако slug2 должен быть уникальным тогда и только тогда, когда он принадлежит одному и тому же slug1, поэтому pizza/pepperoni/ и pizza/pepperoni/ недопустимы, если каждый слаг "pepperoni" принадлежит отдельному объекту. Однако, если бы было 2 разных объекта, таких, что конечный слаг оказался бы pizza/pepperoni/ и pasta/pepperoni/, это было бы абсолютно нормально.

Однако, делая SlugField в модели уникальным = True, не позволит слизням быть одинаковыми, даже если они принадлежат разным объектам.

Единственный обходной путь, который у меня есть Мысль о том, что каждый слаг будет напрямую зависеть от предыдущего, например, slug2=unique_slugify(slug1+object2.name), а затем slug3=unique_slugify(slug2+object3.name).

. Тем не менее, это делает URL-адреса менее интуитивными, поскольку вы все равно можете получить URL-адреса, которые быть одинаковым на slug3, и потребуются разные числа или такие вещи, как taht.

Например: /spa/spanish/spanishsausage/ и /span/spanishsau/spanishsausage/, где slug3 одинаковы для обоих.

Поэтому есть ли в любом случае, я могу сделать слагов таким, что slug3 должен быть уникальным только для 2 различных объектов, если их slug1 и slug2 одинаковы?

Большое вам спасибо

EDIT В конце концов, я сделал все слизни и поля, на которых были созданы слизни, не уникальные. После этого я переопределил функцию save () и получил доступ ко всем объектам с тем же предыдущим слагом, что и этот. Если слаг для данного объекта не был моделью, я возвращаю свое собственное сообщение об ошибке, которое печатается вместо form.errors.

Я все еще оставляю вопрос открытым, если есть лучший способ сделать это , Я доволен тем, как он выглядит на низком уровне, хотел бы знать, есть ли лучший способ.

...