Python 如何显示foreignkey属性django管理字段?

Python 如何显示foreignkey属性django管理字段?,python,django,Python,Django,这个问题与其他问题相似,但实际上是不同的!因此,我有3个模型,例如(为了缩短代码,我删除了一些不必要的东西): 让我举个例子。我可以有两个类别,在这些类别中我可以有“同名”类。让我们思考一下,数学是两个类别的课程。当我想给数学增加一个新科目时,我在管理页面上看到两个同名的数学。所以我想知道哪一个属于哪个类别的管理页面。所以我可以把我的科目加入到正确的课程中 class SubjectAdmin(admin.ModelAdmin): fields = ('subject_title',

这个问题与其他问题相似,但实际上是不同的!因此,我有3个模型,例如(为了缩短代码,我删除了一些不必要的东西):

让我举个例子。我可以有两个类别,在这些类别中我可以有“同名”类。让我们思考一下,数学是两个类别的课程。当我想给数学增加一个新科目时,我在管理页面上看到两个同名的数学。所以我想知道哪一个属于哪个类别的管理页面。所以我可以把我的科目加入到正确的课程中

class SubjectAdmin(admin.ModelAdmin):

    fields = ('subject_title', 'subject_content', 'subject_class',)
因此,在这张图片中(主题=Konular),我添加了一个新主题。我将有一把课堂外键。然而,对于来自不同类别的类,我有相同的名称。那么在这个下拉列表中,我如何知道哪个类属于哪个类别

试试这个

class KonularAdmin(admin.ModelAdmin):

    fields = ('subject_title', 'subject_content', 'subject_class', 'get_classes_category_title')

    def get_classes_category_title(self, obj):
         subject_object = Subjects.objects.get(id=obj.subject_class)
         return str(subject_object.classes_category.category_title)

  • 它返回类别标题名称
您可以使用
\uuuu str\uuuu()
方法更改对象的字符串表示形式:

class Subjects(models.Model):
  subject_title = models.CharField(max_length=200)
  subject_content = models.TextField()
  subject_class = models.ForeignKey(Classes, on_delete=models.SET_DEFAULT)

def __str__(self):
  return f"{self.subject_title} - {self.subject_content} - {self.subject_class}"
  # shorter version:
  # return f"{self.subject_title[:10]} - {self.subject_content[:10]} - {self.subject_class[:10]}"
请检查以下内容:

>>> print(Subjects.objects.first())

如果我没弄错的话,这应该行得通

class Classes(models.Model):
    classes_title = models.CharField(max_length=200)
    classes_content = models.TextField()
    classes_category = models.ForeignKey(Category, on_delete=models.SET_DEFAULT)

    def __str__(self):
        return self.title

class Subjects(models.Model):
    subject_title = models.CharField(max_length=200)
    subject_content = models.TextField()
    subject_class = models.ForeignKey(Classes, on_delete=models.SET_DEFAULT)

    def __str__(self):
        return f"{self.subject_title} - {str(self.subject_class)}"

它实际上不起作用。或者我不知道如何在字段集合中使用函数pend
get\u classes\u category\u title
。是的,我尝试过,但不起作用。(为主题指定的未知字段(get_dersler_kategori_title)在文档中也有这样的说明,但上面给出了错误使用
subject_object
object,我更新解决方案试试那个。除此之外,您的命名约定不好,请坚持pep8,类名称应该是单数(因为一个实例是一个对象)在
Subject
类中,为什么属性以Subject作为前缀开始?我想我需要把这个问题弄清楚。因为两个答案差不多,这不是我要问的:)你完全正确,我读了三遍,这就是我理解的,编辑,我会回答它后,我了解它正确的如何你的模板和这个下拉列表是如何填充请这是默认的django管理页面。我没有自己的template@omerS我的解决方案有效,试试看
class Classes(models.Model):
    classes_title = models.CharField(max_length=200)
    classes_content = models.TextField()
    classes_category = models.ForeignKey(Category, on_delete=models.SET_DEFAULT)

    def __str__(self):
        return self.title

class Subjects(models.Model):
    subject_title = models.CharField(max_length=200)
    subject_content = models.TextField()
    subject_class = models.ForeignKey(Classes, on_delete=models.SET_DEFAULT)

    def __str__(self):
        return f"{self.subject_title} - {str(self.subject_class)}"