【问题标题】:Django: Get TabularInline model objectsDjango:获取 TabularInline 模型对象
【发布时间】:2019-01-25 18:46:49
【问题描述】:

我正在学习 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 网络应用程序,我想做的是在 HTML 中显示任务模型的标题。

寻找这样的东西:

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

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

提前致谢:)

【问题讨论】:

    标签: python django django-models django-admin


    【解决方案1】:

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

    {{ 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 %}
    

    【讨论】:

    • 更改为 user.tasks.all 对我有用。正是我想要的!谢谢你:)
    猜你喜欢
    • 1970-01-01
    • 2011-07-07
    • 2011-01-15
    • 2011-06-07
    • 1970-01-01
    • 1970-01-01
    • 2020-10-31
    • 2016-03-01
    • 2019-01-25
    相关资源
    最近更新 更多