【问题标题】:How to create a model related to another to generate a list如何创建与另一个相关的模型以生成列表
【发布时间】:2019-05-09 15:25:24
【问题描述】:

我正在尝试创建一个待办事项列表,用户可以在其中创建一个任务列表,例如“早上例行”,并将它们直接导入我的待办事项应用程序。

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

谢谢大家

【问题讨论】:

  • 您是否预计同一个 Todo 会出现在多个 TodoList 中,或者每个 Todo 会被分配给一个 TodoList?
  • 嗨,不!一个 todo 可以在多个 todolist 中使用
  • 知道了,我不确定您是否考虑过使用ManyToMany 字段而不是ForeignKey,但它可能有用。 docs.djangoproject.com/en/dev/topics/db/examples/many_to_many 在这些文档中,“Article”相当于您的“TodoList”,“Publication”相当于您的“Todo”。要将已创建的 Todo 任务添加到名为“todolist1”的 TodoList 中,您可以执行以下操作:todolist1.todos.add(todo1, todo2) 并使用以下方式查询:todolist1.todos.all()

标签: python django model logic


【解决方案1】:

如果您在 TodoList 的 list 属性上添加了 ManyToManyField 来代替 ForeignKey,它可能会满足您的需求。

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 等效于 TodoListPublication 等效于 Todo

编辑: 从 TodoList 中删除一个项目如下所示:

todolist1.todos.remove(todo1)

.remove() 不会完全删除待办事项,因此todo1 仍会出现在其他 todolist 中。要从所有 todolist 中完全删除一个待办事项,您需要执行类似的操作。

todo1.delete()

【讨论】:

    猜你喜欢
    • 2015-02-15
    • 2021-11-15
    • 2015-04-12
    • 2012-05-02
    • 2019-09-10
    • 2022-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多