Одна вещь, которую я хотел бы добавить, чтобы избежать жесткого кодирования названия страны, состояла в том, чтобы сохранить список в отдельном файле CSV или Excel и присоединить его к источнику данных. Таким образом, вы можете добавлять или удалять страны без публикации представлений.
Если только необходимо указать на "любой продукт", не любая модель, то решение состоит в том, чтобы иметь Модель продукта, которой наследовались все продукты (т.е. Телевидение и Видеокамера оба подклассы продукта), и дают модели Offer ForeignKey продукту.
Вы могли бы хотеть взглянуть на образцовое наследование.
ContentTypes - это правильный подход. Это связано с тем, что forignkey может указывать только на одну таблицу типа, поэтому вам нужно пройти через промежуточную таблицу и выполнять расщепление в зависимости от другого типа.
Так что модель наследования для иерархии классов, но ContentType для иностранных ключей.