Как вывести объект foreignkey вместо всего класса в администрацию Django
В моем файле 'models.py' есть 2 таблицы LOOKUP: класс 'Part' и класс 'Vendor', как показано на рисунке:
# Part Lookup table
class Part(models.Model):
part_id = models.CharField(max_length=64) # Part ID
description = models.CharField(max_length=64) # Part description
pq = models.DecimalField(max_digits=7, decimal_places=2) # Pack quantity
mrrp = models.DecimalField(max_digits=10, decimal_places=2) # Manufacturers Recommended Retail Price
# Display something in admin
def __str__(self):
return f"{self.id} {self.part_id} {self.description} {self.pq} {self.mrrp}"
# Vendor Lookup table
class Vendor(models.Model):
name = models.CharField(max_length=64)
# Display something in admin
def __str__(self):
return f"{self.id} {self.name}"
Затем у меня есть еще одна таблица FACT или ASSOCIATION, класс 'Relationship', как показано на рисунке:
# Relationship association table (Between Part & Vendor)
class Relationship(models.Model):
part_id = models.ForeignKey(Part, on_delete=models.CASCADE, related_name="part")
vendor_id = models.ForeignKey(Vendor, on_delete=models.CASCADE, related_name="vendor")
# Display something in admin
def __str__(self):
return f"{self.id} {self.part_id} {self.vendor_id}"
Ниже приведен весь мой файл 'admin.py':
from django.contrib import admin
# Import the classes from models.py
from .models import Part, Vendor, Relationship, Transaction, Offer, Supersession, Category, Group
# Django admin title
admin.site.site_header = "Online Parts System"
# Model Admin class
class PartAdmin(admin.ModelAdmin):
# Data headers (must match objects of the Part class)
list_display = ('id', 'part_id', 'description', 'pq', 'mrrp')
# Model Admin class
class VendorAdmin(admin.ModelAdmin):
# Data headers (must match objects of the Vendor class)
list_display = ('id', 'name')
# Model Admin class
class RelationshipAdmin(admin.ModelAdmin):
# Data headers (must match objects of the Vendor class)
list_display = ('id', 'part_id', 'vendor_id')
# Register your models here.
admin.site.register(Part, PartAdmin)
admin.site.register(Vendor, VendorAdmin)
admin.site.register(Relationship, RelationshipAdmin)
Пока все работает очень хорошо. К сожалению, на странице администрирования Django > Таблица Relationships, в колонке 'Part ID', я вижу каждый объект класса 'Part' (поскольку я использовал строку ForeignKey)
Я хочу видеть только один объект, например 'part_id', а не все остальные вместе взятые.
Какой самый простой способ достичь этого?
Пожалуйста, посмотрите изображение ниже. В основном я хочу упростить строку, подчеркнутую красным цветом.
Страница администратора Django на данный момент
Строка, используемая в панели администратора в колонке part_id
, берется из метода __str__
модели Part
. Вы можете изменить реализацию метода __str__
, чтобы включить только part_id
.
# Part Lookup table
class Part(models.Model):
part_id = models.CharField(max_length=64) # Part ID
description = models.CharField(max_length=64) # Part description
pq = models.DecimalField(max_digits=7, decimal_places=2) # Pack quantity
mrrp = models.DecimalField(max_digits=10, decimal_places=2) # Manufacturers Recommended Retail Price
# Display something in admin
def __str__(self):
return f"{self.part_id}"