На моей веб-странице есть несколько 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.
Я все еще оставляю вопрос открытым, если есть лучший способ сделать это , Я доволен тем, как он выглядит на низком уровне, хотел бы знать, есть ли лучший способ.