У меня есть эти «типичные» модели, которые более или менее напоминают мое приложение django, для которого я хотел использовать интерфейс администратора, достаточно хороший для моих целей (но и через 3 месяца я все еще не очень хорош с Django)
models.py
class genericItem(models.Model):
#a genericItem can be a monitor (with its properties) a laptop (with its properties..) etc..
genericItem_ID = models.AutoField( primary_key=True) # Field name made lowercase.
genericItemName = models.CharField(max_length=30, blank=True, null=True)
category = models.ForeignKey('categories', models.DO_NOTHING, db_column='category_ID', null=True,blank=True)
def __str__(self):
return self.genericItemName
class item(commonFields):
#items are goods that may refer to genericItems, e.g. I buy 4 items and 3 of them are monitors (genericItems)
item_ID = models.AutoField(db_column='item_ID', primary_key=True) # Field name made lowercase.
genericItem = models.ForeignKey('genericItem', models.DO_NOTHING,related_name='genericItem', db_column='genericItem_ID')
location = models.ForeignKey('location', models.DO_NOTHING,db_column='room_ID',blank=True, null=True)
serialnumber = models.CharField(db_column='serialNumber', max_length=20, blank=True, null=True) # Field name made lowercase.
accessory = models.ForeignKey('self', models.DO_NOTHING, db_column='accessory', blank=True, null=True)
def __str__(self):
return self.genericItem.genericItemName
class tblFiles(models.Model):
#one could upload files for a item or genericItem
file_ID = models.AutoField(primary_key=True)
filename = models.FileField(null=False, blank=False, upload_to=("somewhere"))
description = models.CharField(max_length=200, blank=True, null=True)
item = models.ForeignKey('item', models.DO_NOTHING, db_column='item_ID', blank=True, null=True, related_name="itemFile")
genericItem = models.ForeignKey('genericItem', models.DO_NOTHING, db_column='genericItem_ID', blank=True, null=True, related_name="genericItemFile")
def __str__(self):
return os.path.basename(self.filename.name)
admin.py
class tblFilesInline(admin.TabularInline):
model = tblFiles
extra = 0
fields = ['filename','description']
class itemAdmin(admin.ModelAdmin):
list_display = ['genericItem','fieldOne','location','serialnumber']
fieldsets = [(None,{'fields':['genericItem','fieldOne','location','serialnumber',]})]
inlines = [tblFilesInline ]
class genericItemAdmin(admin.ModelAdmin):
fieldsets = [
(None,{'fields':['genericItemName','category']})]
list_display=('genericItemName','category')
inlines = [tblFilesInline ]
Я думал, что, поскольку item
и genericItem
связаны через ForeignKey, tabularInlineвнутри itemAdmin
будут отображаться файлы как item
, так и genericItem
, но, конечно, это не так, и я вижу только файлы из item
.Как я могу увидеть файл с обоих?Это помогло бы пользователю не дублировать файлы, потому что, когда он добавляет item
и связывает его с genericItem
, он может видеть, что фотография, например, уже есть, и он может добавлять другие файлы (к item
)спасибо!