【发布时间】:2019-03-24 17:09:20
【问题描述】:
我正在制作a task tracker webapp(the full source code 也可用)并且我有一个数据库结构,其中每个任务都有一个标题、描述和一些实例,每个都可以标记为不完整/不完整:
class Task(models.Model):
title = OneLineTextField()
description = models.TextField(blank=True)
class TaskInstance(models.Model):
task = models.ForeignKey(Task, on_delete=models.CASCADE)
is_complete = models.BooleanField()
任务和实例可以分开共享,尽管对实例的访问应该意味着对任务的读取访问。这适用于教师创建任务并将其分配给学生的课堂情况。
class TaskPermission(models.Model):
task = models.ForeignKey(Task, on_delete=models.CASCADE, related_name='permissions')
user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='task_permissions_granted')
shared_by = models.ForeignKey(User, on_delete=models.PROTECT, null=True, related_name='task_permissions_granting')
can_edit = models.BooleanField(default=False)
class Meta:
unique_together = 'task', 'user', 'shared_by',
class TaskInstancePermission(models.Model):
task_instance = models.ForeignKey(TaskInstance, on_delete=models.CASCADE, related_name='permissions')
user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='task_instance_permissions_granted')
shared_by = models.ForeignKey(User, on_delete=models.PROTECT, null=True, related_name='task_instance_permissions_granting')
can_edit = models.BooleanField(default=False)
class Meta:
unique_together = 'task_instance', 'user', 'shared_by',
我的问题是如何为TaskInstances 创建一个表单,其中包含is_complete 的字段,以及Task 的title 和description。像这样的东西会起作用吗?还是我需要实现自己的 save 和 clean 方法?
class TaskForm(ModelForm):
class Meta:
model = TaskInstance
fields = ('is_complete', 'task__title', 'task__description')
【问题讨论】:
-
除非你想覆盖它们,否则你不需要实现它们
-
我不太了解您的要求。任意标题和描述不需要对应于任何
Task实例。简单地从现有任务列表中选择任务会更正常 - 您可以使用标题和/或描述轻松显示它们。这一切都取决于您希望用户界面如何工作。 -
@RobinZigmond 我明白你在说什么。但是,我正在考虑让每个任务都有一个实例列表,所以它朝另一个方向发展。然后可以从任务实例修改任务的标题和描述。我可能会重新考虑这一点,但我想简化每个任务一个实例的情况,不过......
-
哦,所以您想要一个用于编辑特定
TaskInstance实例的页面,您可以在其中更改底层任务的标题和描述?这是完全可能的(如果您不介意一个实例的“远距离动作”基于相同的Task影响其他实例) - 在这种情况下,请使用常规的Form而不是ModelForm并做所有在您的视图中插入/更新必要的数据库。
标签: python django django-models django-forms django-model-field