Форма Django: ссылочные поля из внешнего ключа - PullRequest
0 голосов
/ 24 марта 2019

Я делаю веб-приложение для отслеживания задач ( также доступен полный исходный код ), и у меня есть структура базы данных, в которой каждая задача имеет заголовок, описание и некоторые количество экземпляров, каждый из которых может быть помечен как неполный / неполный:

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

У меня вопрос, как создать форму для TaskInstance s с полями для ее is_complete, а также для Task 'title и description. Будет ли что-то вроде этой работы? Или мне нужно реализовать собственные методы save и clean?

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

1 Ответ

0 голосов
/ 25 марта 2019

Я думаю inlineformset_factory - это то, что я ищу!

На самом деле, это не кажется полезным: это для нескольких форм одного типа, а не для разных типов ...

...