Вам это нравилось?
Измените свой CSS следующим образом
.custom-table> tbody {
display:block;
height:50px;
overflow:auto;
}
.custom-table> thead, tbody tr {
display:table;
width:100%;
}
.custom-table> thead {
width: 100%
}
.custom-table {
width:100%;
}
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet"/>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
<div class="table-responsive">
<table class="table table-striped table-hover custom-table text-nowrap">
<thead>
<tr>
<th>row1</th>
<th>row2</th>
<th>row2</th>
</tr>
</thead>
<tbody>
<tr>
<td>text1</td>
<td>text2</td>
<td>text3</td>
</tr>
<tr>
<td>text4</td>
<td>text5</td>
<td>text6</td>
</tr>
<tr>
<td>text7</td>
<td>text8</td>
<td>text9</td>
</tr>
</tbody>
</table>
</div>
Я удалил бы site
поле на моем Photo
модель и добавляет a ForeignKey
кому: Gallery
. Я удалил бы limit_choices_to
от photos
поля на Gallery
модель.
Поскольку Вы используете ForeignKey
s к Site
s, который означает, сайты не совместно используют галереи и фотографии. Поэтому имея их я упомянул выше, уже бесполезно.
class Photo(models.Model):
title = models.CharField(max_length=100)
gallery = models.ForeignKey(Gallery, related_name='photos')
file = models.ImageField(upload_to=get_site_profile_path)
def __unicode__(self):
return self.title
class Gallery(models.Model):
name = models.CharField(max_length=40)
site = models.ForeignKey(Site)
def __unicode__(self):
return self.name
После того как Вы устанавливаете site
на галерее все его фотографии наследуют это свойство. И сайт будет доступен как photo_instance.gallery.site
:
@property
def site(self):
return self.gallery.site
Это должно работать, как будто у Вас был a site
поле. Но я не протестировал его.
Изменение вещей или курс, если Вы решаете, что галерея или фотография могут появиться в нескольких сайтах.
Согласно документам, "limit_choices_to не имеет никакого эффекта при использовании на ManyToManyField с промежуточной таблицей". Моим чтением, которое означает, это не имеет никакого эффекта вообще, потому что ManyToManyFields используют промежуточные таблицы...
Я не попытался заставить его работать в Администраторском сайте, но от Ваших собственных представлений, можно создать форму и переопределить queryset, используемый для заполнения списка выбора:
form.fields["photos"].queryset = request.user.photo_set.all()
Да. Вам необходимо переопределить форму, которую администратор использует для модели Галерея
, а затем ограничить набор запросов поля фотографий
в этой форме:
class GalleryAdminForm(django.forms.ModelForm):
class Meta:
model = Gallery
def __init__(self, *args, **kwargs):
super(GalleryAdminForm, self).__init__(*args, **kwargs)
self.fields['segments'].queryset = Photo.objects.filter(site=self.instance.site)
class GalleryAdmin(django.contrib.admin.ModelAdmin):
form = GalleryAdminForm
django.contrib.admin.site.register(Gallery, GalleryAdmin)