Django:获取TabularInline模型对象

时间:2019-01-25 18:46:50

标签: python django django-models django-admin

我正在学习Django Web的基础知识,但遇到了问题

我在 models.py 处具有以下模型(简体):

class CustomUser(AbstractUser): # Custom Admin Model
        def __str__(self):
            return self.username

        def __len__(self):
            return 1

class Task(models.Model):
            title = models.CharField(max_length=250, blank=False)
            author = models.ForeignKey(CustomUser, on_delete=models.CASCADE, default=None)

,也可以通过 admin.py 进行此操作:

class TaskInline(admin.TabularInline):
    model = Task

class CustomUserAdmin(UserAdmin):
    add_form = CustomUserCreationForm
    form = CustomUserChangeForm
    model = CustomUser
    list_display = ['email', 'username']
    inlines = [TaskInline]

    fieldsets = (
        (('User'), {'fields': ('username', 'email')}),
    )

我目前正在使用TODO Web应用程序,我想做的是用HTML显示“任务标题”模型。

正在寻找这样的东西:

{{ user.inlines[0].title }} # This does not work 

有可能吗?我是否可以为CustomModel创建一个返回他的内联模型的函数(例如:get_inline_models(self))?其他解决方案?

预先感谢:)

1 个答案:

答案 0 :(得分:0)

如果您要根据模型通过用户实例访问任务标题,则可以:

{{ user.task_set }}

以获取与某个用户相关的所有任务。您还可以为您的作者字段定义一个related_name选项:

class Task(models.Model):
   title = models.CharField(max_length=250, blank=False)
   author = models.ForeignKey(CustomUser, on_delete=models.CASCADE, default=None, related_name='tasks')

这样,您可以:

{{ user.tasks }}

了解此here

示例

{% for task in user.tasks %}
    {{ task.title }}
{% endfor %}