Как выполнить проверку, когда использование добавляет () на многих ко многим отношениям в Django?

у меня есть модель Category с родителем/ребенком сам отношение Для основной категории и sub категорий:

class Place(models.Model):
    name = models.CharField(_("name"), max_length=100)
    categories = models.ManyToManyField("Category", verbose_name=_("categories"))

class Category(models.Model):
    name = models.CharField(_("name"), max_length=100)
    parent = models.ForeignKey('self', blank=True, null=True, related_name='child_set')

я должен предотвратить висячие строки, для предотвращения этого вида ошибок (в администраторском веб-интерфейсе)

c_parent = Category(name='Restaurant')
c_parent.save()

c_child = Category(name="Japanese restaurant", parent=c_parent)
c_child.save()

place1 = Place (name="Planet sushi")
place1.save()
place1.categories.add(c_parent)
place1.categories.add(c_child)

Таким образом, теперь у нас есть новое Место, названное "Суши планеты", это - Ресторан (корневая категория) и японский Ресторан (sub категория)

но я хочу предотвратить такого рода вещи:

place2 = Place (name="Tokyofood")
place2.save()

place2.categories.add(c_child)

потому что родитель не установлен или не является корректной родительской категорией

где я могу сделать проверку формы для администратора? и другие формы (потому что любой пользователь может добавить новое место и должен будет выбрать корректные категории для),

5
задан e-satis 14 April 2011 в 15:55
поделиться

1 ответ

обновление:

в классе Place добавьте этот метод:

def add_cat(self,cat):
    self.categories.add(cat)
    if cat.parent:
        self.add_cat(cat.parent)

теперь вместо использования place1.categories.add (cat) вы можете использовать place1.add_cat (cat) , и он автоматически добавит категорию , и его родительская категория, и его родительская категория и так далее. это не проверено, но даже если это не сработает, оно должно донести суть.

1
ответ дан 14 December 2019 в 08:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: