简体   繁体   English

Django表单:来自外键的引用字段

[英]Django form: reference fields from foreign key

I'm making a task tracker webapp ( the full source code is also available) and I have a database structure where each task has a title, a description, and some number of instances, that can each be marked incomplete/incomplete: 我正在创建一个任务跟踪器webapp完整的源代码也可用),我有一个数据库结构,其中每个任务都有一个标题,一个描述和一些实例,每个实例都可以标记为不完整/不完整:

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()

The task and the instances can be shared separately, although access to the instance should imply read access to the task. 尽管对实例的访问应该意味着对任务的读访问权,但是可以单独共享任务和实例。 This is intended for classroom situations, where the teacher creates a task and assigns it to their students. 这适用于教室情况,教师创建任务并将其分配给学生。

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',

My question is how to create a form for TaskInstance s with fields for its is_complete , as well as its Task 's title and description . 我的问题是如何为TaskInstance创建一个表单,其中包含is_complete字段,以及Tasktitledescription Would something like this work? 会这样的吗? Or would I need to implement my own save and clean methods? 或者我需要实现自己的saveclean方法?

class TaskForm(ModelForm):
    class Meta:
        model = TaskInstance
        fields = ('is_complete', 'task__title', 'task__description')

I think inlineformset_factory is what I'm looking for! 我认为inlineformset_factory是我正在寻找的!

Actually, it does not seem to be useful: it is for multiple forms of the same type, not different types... 实际上,它似乎并没有用:它适用于同一类型的多种形式,而不是不同的类型......

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM