django: тот же самый tabularInline для двух иностранных ключей - PullRequest
0 голосов
/ 29 ноября 2018

У меня есть эти «типичные» модели, которые более или менее напоминают мое приложение 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)спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...