Как создать модель, связанную с другой, чтобы создать список - PullRequest
0 голосов
/ 09 мая 2019

Я пытаюсь создать список задач, в котором пользователи могут создавать список задач, таких как «утренняя рутина», и импортировать их непосредственно в мое приложение todo.

Models.py Todo и TodoList

class Todo(models.Model):
    author = models.ForeignKey(User, on_delete=models.CASCADE,verbose_name="Nom de l'utilisateur")
    text = models.CharField(max_length=150, verbose_name="Nom de la Todo")
    content = models.TextField(verbose_name="Description supplémentaire",null=True, blank=True)


class TodoList(models.Model):
    list = models.ForeignKey(Todo, on_delete=models.CASCADE,verbose_name="Nom de l'utilisateur")
    text = models.CharField(max_length=150, verbose_name="Nom de la Todo")

Мой todoApp работает, но я не могу понять, как их связать и импортировать список из todo в TodoList

Спасибо, ребята

1 Ответ

0 голосов
/ 09 мая 2019

Если вы добавили ManyToManyField вместо ForeignKey в атрибуте list TodoList, он может делать то, что вам нужно.

class Todo(models.Model):
    author = models.ForeignKey(User, on_delete=models.CASCADE,verbose_name="Nom de l'utilisateur")
    text = models.CharField(max_length=150, verbose_name="Nom de la Todo")
    content = models.TextField(verbose_name="Description supplémentaire",null=True, blank=True)


class TodoList(models.Model):
    list = models.ManyToManyField(Todo, verbose_name="Nom de l'utilisateur")
    text = models.CharField(max_length=150, verbose_name="Nom de la Todo")

Тогда в логике вашего приложения вы можете сделать что-то вроде:

todolist1 = TodoList(text='Stuff to do before tonight')
toddolist1.save()

todo1 = Todo(author=author_obj, text="Brush teeth", content="Remember to floss")
todo1.save()
todo2 = Todo(author=author_obj, text="Comb hair", content="Use water")
todo2.save()

todolist1.todos.add(todo1, todo2)

Тогда вы получите список, выполнив:

todolist1.todos.all()

ссылка: https://docs.djangoproject.com/en/dev/topics/db/examples/many_to_many/, где Article в этом примере эквивалентно TodoList, и Publication эквивалентно Todo.

EDIT: удаление элемента из списка TodoList будет выглядеть следующим образом:

todolist1.todos.remove(todo1)

.remove() не удалит задачу полностью, поэтому todo1 все равно появится в других тодолистах.Чтобы полностью удалить задачу из всех списков, вы должны сделать что-то вроде.

todo1.delete()
...