diff --git a/django/contrib/admin/templates/admin/edit_inline/tabular.html b/django/contrib/admin/templates/admin/edit_inline/tabular.html
index d5ac9b0..760bae7 100644
--- a/django/contrib/admin/templates/admin/edit_inline/tabular.html
+++ b/django/contrib/admin/templates/admin/edit_inline/tabular.html
@@ -35,7 +35,7 @@
           {% for fieldset in inline_admin_form %}
             {% for line in fieldset %}
               {% for field in line %}
-                {% if field.is_hidden %} {{ field.field }} {% endif %}
+                {% if field.field.is_hidden %} {{ field.field }} {% endif %}
               {% endfor %}
             {% endfor %}
           {% endfor %}
@@ -44,6 +44,7 @@
         {% for fieldset in inline_admin_form %}
           {% for line in fieldset %}
             {% for field in line %}
+              {% if not field.field.is_hidden %}
               <td{% if field.field.name %} class="field-{{ field.field.name }}"{% endif %}>
               {% if field.is_readonly %}
                   <p>{{ field.contents }}</p>
@@ -52,6 +53,7 @@
                   {{ field.field }}
               {% endif %}
               </td>
+              {% endif %}
             {% endfor %}
           {% endfor %}
         {% endfor %}
diff --git a/tests/regressiontests/admin_inlines/admin.py b/tests/regressiontests/admin_inlines/admin.py
index cf51fa4..6b51ad2 100644
--- a/tests/regressiontests/admin_inlines/admin.py
+++ b/tests/regressiontests/admin_inlines/admin.py
@@ -125,6 +125,21 @@ class ChildModel2Inline(admin.StackedInline):
     model = ChildModel2
 
 
+#admin and form for #18263
+class SomeChildModelForm(forms.ModelForm):
+
+    class Meta:
+        model = SomeChildModel
+        widgets = {
+            'position': forms.HiddenInput,
+        }
+
+
+class SomeChildModelInline(admin.TabularInline):
+    model = SomeChildModel
+    form = SomeChildModelForm
+
+
 site.register(TitleCollection, inlines=[TitleInline])
 # Test bug #12561 and #12778
 # only ModelAdmin media
@@ -141,4 +156,5 @@ site.register(Holder4, Holder4Admin)
 site.register(Author, AuthorAdmin)
 site.register(CapoFamiglia, inlines=[ConsigliereInline, SottoCapoInline])
 site.register(ProfileCollection, inlines=[ProfileInline])
-site.register(ParentModelWithCustomPk, inlines=[ChildModel1Inline, ChildModel2Inline])
\ No newline at end of file
+site.register(ParentModelWithCustomPk, inlines=[ChildModel1Inline, ChildModel2Inline])
+site.register(SomeParentModel, inlines=[SomeChildModelInline])
diff --git a/tests/regressiontests/admin_inlines/models.py b/tests/regressiontests/admin_inlines/models.py
index 5a0f4d8..6cafa3b 100644
--- a/tests/regressiontests/admin_inlines/models.py
+++ b/tests/regressiontests/admin_inlines/models.py
@@ -164,6 +164,17 @@ class ChildModel2(models.Model):
         return '/child_model2/'
 
 
+# Models for #18263
+
+class SomeParentModel(models.Model):
+    name = models.CharField(max_length=1)
+
+
+class SomeChildModel(models.Model):
+    name = models.CharField(max_length=1)
+    position = models.PositiveIntegerField()
+    parent = models.ForeignKey(SomeParentModel)
+
 # Other models
 
 class ProfileCollection(models.Model):
diff --git a/tests/regressiontests/admin_inlines/tests.py b/tests/regressiontests/admin_inlines/tests.py
index 4f25d3d..f904479 100644
--- a/tests/regressiontests/admin_inlines/tests.py
+++ b/tests/regressiontests/admin_inlines/tests.py
@@ -11,7 +11,8 @@ from django.test.utils import override_settings
 from .admin import InnerInline
 from .models import (Holder, Inner, Holder2, Inner2, Holder3, Inner3, Person,
     OutfitItem, Fashionista, Teacher, Parent, Child, Author, Book, Profile,
-    ProfileCollection, ParentModelWithCustomPk, ChildModel1, ChildModel2)
+    ProfileCollection, ParentModelWithCustomPk, ChildModel1, ChildModel2,
+    SomeParentModel, SomeChildModel)
 
 
 @override_settings(PASSWORD_HASHERS=('django.contrib.auth.hashers.SHA1PasswordHasher',))
@@ -161,6 +162,14 @@ class TestInline(TestCase):
         self.assertContains(response, child1_shortcut)
         self.assertContains(response, child2_shortcut)
 
+    def test_inline_hidden_field_no_column(self):
+        """Make sure hidden fields don't get a column in tabular inlines"""
+        parent = SomeParentModel.objects.create(name='a')
+        SomeChildModel.objects.create(name='b', position='0', parent=parent)
+        SomeChildModel.objects.create(name='c', position='1', parent=parent)
+        response = self.client.get('/admin/admin_inlines/someparentmodel/%s/' % parent.pk)
+        self.assertNotContains(response, '<td class="field-position">')
+
 
 @override_settings(PASSWORD_HASHERS=('django.contrib.auth.hashers.SHA1PasswordHasher',))
 class TestInlineMedia(TestCase):
