Уведомления

Группа в Telegram: @pythonsu

#1 Март 27, 2016 08:27:41

maddread
Зарегистрирован: 2016-03-27
Сообщения: 1
Репутация: +  0  -
Профиль   Отправить e-mail  

связь трех моделей для админки

Есть три модели:

class Place(models.Model): 
    place_id = models.AutoField(primary_key=True)
    place = models.CharField(max_length=10, null=False)
class Host(models.Model): 
    host_id = models.AutoField(primary_key=True)
    place = models.ForeignKey('Place', on_delete=models.PROTECT)
    host = models.CharField(max_length=30, blank=False, null=False)
class Device(models.Model):
    device_id = models.AutoField(primary_key=True)
    host = models.ForeignKey('Host', on_delete=models.PROTECT)
    model = models.ForeignKey('Model', on_delete=models.PROTECT)
    ip = models.GenericIPAddressField(null=True)
    name = models.CharField(max_length=30, blank=False, null=False)

В админке django для модели Device хочу видеть и Place, для ограничения количества записей и более удобной работы. Но как привязать Place, если она относится к Device через модель Host?
На данный момент админ-модель для Device такая:
class DeviceAdmin(admin.ModelAdmin):
    list_display=('host', 'name', 'model', 'ip', 'slots')
    list_filter = (
        'host__place', 
        ('host', admin.RelatedOnlyFieldListFilter),
        ('model', admin.RelatedOnlyFieldListFilter),
    )
    def host_place(self, instance):
        return instance.host.place
    host_location.short_description = 'Place'
    host_location.admin_order_field = 'host__place'
admin.site.register(Device, DeviceAdmin)

Здесь такая связь работает только для фильтрации при просмотре. А мне нужно, чтобы Place было видно при добавлении/редактировании Device.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version