У меня есть база данных MySQL с четырьмя связанными таблицами: проект, блок, unit_equipment и оборудование. Проект может иметь много юнитов;У единицы может быть много связанных записей оборудования. Один юнит может принадлежать только одному проекту, но между оборудованием и юнитом существует множество ко многим (отсюда и таблица мостов unit_equipment в БД). Я использую Django и пытаюсь создать вид (или список?), Который показывает все 3 модели на одной странице вместе. Таким образом, в нем будут перечислены все проекты, все подразделения и все оборудование. В идеале дисплей должен выглядеть следующим образом:
Project --------- Unit ------------- Equipment
Project 1 first_unit some_equipment1, some_equipment2
Project 1 second_unit more_equipment1, more_equipment2
Project 2 another_unit some_equipment1, more_equipment1
Project 2 and_another_unit some_equipment2, more_equipment2
, но в этот момент я также был бы рад, если бы для каждой единицы оборудования была предусмотрена отдельная строка, если разделение запятыми их вызывает боль.
Хотя кажется простым создание формы, в которую я могу добавить новый проект и добавить связанные данные о единицах и оборудовании (используя класс TabularInline), я не могу на всю жизнь понять, как собрать эти данные вместе ипросто покажи это. Я просто хочу получить «основной список» всего в базе данных, в основном.
Вот код, который у меня пока есть:
models.py
class Project(models.Model):
name = models.CharField(max_length=255, blank=True, null=True)
class Meta:
managed = False
db_table = 'project'
def __str__(self):
return self.name
class Unit(models.Model):
project = models.ForeignKey(Project, models.DO_NOTHING, blank=True, null=True)
name = models.CharField(max_length=255, blank=True, null=True)
class Meta:
managed = False
db_table = 'unit'
def __str__(self):
return self.name
class UnitEquipment(models.Model):
unit = models.ForeignKey(Unit, models.DO_NOTHING, blank=True, null=True)
equipment = models.ForeignKey(Equipment, models.DO_NOTHING, blank=True, null=True)
class Meta:
managed = False
db_table = 'unit_equipment'
class Equipment(models.Model):
name = models.CharField(max_length=100, blank=True, null=True)
description = models.CharField(max_length=255, blank=True, null=True)
class Meta:
managed = False
db_table = 'equipment'
def __str__(self):
return self.name
просмотров. py
def project_detail_view(request):
obj = Project.objects.all()
context = {'object': obj}
return render(request, "project/project_detail.html", context)
urls.py
urlpatterns = [
path('project/', project_detail_view),
path('', admin.site.urls),
]
admin.py
class UnitTabularInLine(admin.TabularInline):
model = Unit
extra = 0
class ProjectAdmin(admin.ModelAdmin):
inlines = [UnitTabularInLine]
class Meta:
model = Project
# a list of displayed columns name.
list_display = ['name']
# define search columns list, then a search box will be added at the top of list page.
search_fields = ['name']
# define filter columns list, then a filter widget will be shown at right side of list page.
list_filter = ['name']
# define model data list ordering.
ordering = ('name')
Я думаю, мне нужно как-то добавить больше записей в list_display в admin
файл, но каждый раз, когда я пытаюсь добавить устройство или оборудование, он выдает ошибку. Я также пытался добавить больше атрибутов в Project, но мне кажется, что я не могу понять правильный синтаксис, и я никогда не уверен, какой класс модели я должен сделать.
Я такжеЯ посмотрел на FormSets, но не могу понять, как изменить мой текущий код, чтобы он заработал.
Как мне объединить эти модели в единое представление?