簡體   English   中英

如何顯示外鍵屬性 django 管理字段?

[英]How to show foreignkey attributes django admin fields?

這個問題與其他問題相似,但實際上是不同的,所以:我有 3 個模型,例如(我刪除了一些不必要的東西以縮短代碼):

class Category(models.Model):
    category_title = models.CharField(max_length=200)
    category_content = models.TextField()
    category_slug = models.CharField(max_length=200)

     def __str__(self):
         return self.category_title


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.classes_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 self.subject_title

所以讓我舉個例子。 我可以有 2 個類別,在這些類別中我可以有“同名”類。 讓我們想想數學是兩個類別的 class。 當我想在數學中添加一個新主題時,我在管理頁面中看到了 2 個同名的數學。 所以我想知道哪個屬於管理頁面中的哪個類別。 所以我可以將我的主題添加到右邊的 class。

class SubjectAdmin(admin.ModelAdmin):

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

所以在這張圖片中(Subjects = Konular)我添加了一個新的主題。 我將擁有 Class 的外鍵。 但是,對於來自不同類別的類,我有相同的名稱。 那么在這個下拉列表中,我怎么知道哪個 class 屬於哪個類別?

在此處輸入圖像描述

嘗試這個...

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)

  • 它返回類別標題名稱

您可以使用__str__()方法更改 object 的字符串表示:

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)}"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM