从Django管理中的另一个模型显示字段

发布于 2025-01-18 08:01:39 字数 1034 浏览 3 评论 0原文

假设我有两个模型。
我想让程序模型中的主题字段出现在 UserProgramAdmin 中。

最好的方法是什么?

class Program(models.Model):
    name = models.CharField(max_length=15, blank=False)
    summary = models.CharField(max_length=200, blank=True)
    subject = models.ManyToManyField(Subject, related_name='all_subjects')
    is_active = models.BooleanField(default=True)
    created_at = models.DateTimeField(auto_now_add=True, editable=False)
    updated_at = models.DateTimeField(auto_now=True, editable=False)

    def __str__(self) -> str:
        return self.name

class UserProgram(models.Model):
    user = models.ForeignKey(
        settings.AUTH_USER_MODEL,
        on_delete=models.CASCADE,
    )
    program = models.ForeignKey(
        Program,
        on_delete=models.CASCADE,
    )
    is_active = models.BooleanField(default=True)
    is_finish = models.BooleanField(default=False, editable=False)


/admin.py
class UserProgramAdmin(admin.ModelAdmin):
    list_display = ('user', 'program' , 'is_active', 'is_finish')

Let say I have two model.
I want to make subject field in Program model appear in UserProgramAdmin.

What is the best way to do that?

class Program(models.Model):
    name = models.CharField(max_length=15, blank=False)
    summary = models.CharField(max_length=200, blank=True)
    subject = models.ManyToManyField(Subject, related_name='all_subjects')
    is_active = models.BooleanField(default=True)
    created_at = models.DateTimeField(auto_now_add=True, editable=False)
    updated_at = models.DateTimeField(auto_now=True, editable=False)

    def __str__(self) -> str:
        return self.name

class UserProgram(models.Model):
    user = models.ForeignKey(
        settings.AUTH_USER_MODEL,
        on_delete=models.CASCADE,
    )
    program = models.ForeignKey(
        Program,
        on_delete=models.CASCADE,
    )
    is_active = models.BooleanField(default=True)
    is_finish = models.BooleanField(default=False, editable=False)


/admin.py
class UserProgramAdmin(admin.ModelAdmin):
    list_display = ('user', 'program' , 'is_active', 'is_finish')

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

三生殊途 2025-01-25 08:01:40

最好的方法是在 Program 字段的 __str__ 中显示 subject,如下所示:

class Program(models.Model):
    #Your other code
    def __str__(self):
        return f'{self.name} - {self.subject}'

然后是 Program 的主题 显示在 UserProgram 的管理中。

The best way to do this would be to also show subject in the __str__ in Program field like this:

class Program(models.Model):
    #Your other code
    def __str__(self):
        return f'{self.name} - {self.subject}'

Then the subject of Program shows up in the admin of UserProgram.

独自←快乐 2025-01-25 08:01:39

您应该在userProgram上定义一种方法,然后在userProgramadmin list_display属性型

py

class UserProgram(models.Model):
    #...model attributes
    
    def get_subject(self):
        subject = self.program.subject.all()
        return subject

Admin.py.py中调用它。

class UserProgramAdmin(admin.ModelAdmin):
    list_display = ('get_subject', 'attribute_to_display')

You should define a method on UserProgram and then call it in your UserProgramAdmin list_display attribute

models.py

class UserProgram(models.Model):
    #...model attributes
    
    def get_subject(self):
        subject = self.program.subject.all()
        return subject

admin.py

class UserProgramAdmin(admin.ModelAdmin):
    list_display = ('get_subject', 'attribute_to_display')
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文