Have you looked at permissions ?

Sent from my iPad

> On 13-Feb-2020, at 6:06 PM, Phil Kauffman <[email protected]> wrote:
> 
> Bill,
> 
> Thank You for taking the time to respond. I will definitely need to read up 
> on the options you presented. My first inclination was to get familiar with 
> the first option as it seems easiest. However, now that you mention VueJS I 
> will look into that as well.
> 
>> On Wednesday, February 12, 2020 at 6:46:42 PM UTC-5, ke1g wrote:
>> What happens in the browser stays in the browser, unless you do something 
>> about it.
>> 
>> Forgive me if I'm being too basic below:
>> 
>> There are three approaches to click and see a filtering change, with trade 
>> offs in performance, complexity, and the impact if the user's browser is on 
>> a humble box.
>> When the user clicks, it's on a link, and you reload the page with the 
>> filter applied.  No JavaScript required.  Pretty slow.  more network load, 
>> more browser load, and more load on the server.  (I'm not going into the old 
>> approach of having an iframe and the link reloads the iframe because iframes 
>> are tricky, and if you're showing a big table, it's most of the page 
>> anyway.)  Do be sure that your images, CSS files, and JavaScript files are 
>> set to encourage the browser and/or the network to cache them, but the HTML 
>> will load every time, and the URL will likely show the filter settings 
>> (though you can do things with cookies and/or session store, but you will 
>> surprise your users someday.
>> Load all the data in the first place, and use JavaScript in combination with 
>> CSS to hide the stuff that's filtered out.  If you go this way, do arrange 
>> to use CSS controlled by a class on a single containing element to control 
>> visibility, because doing big DOM modifications in JavaScript performs 
>> poorly.  This is the snappiest approach, but you have to have loaded 
>> everything, at cost of network and server load, even if you expect the user 
>> to filter later, and at the cost of RAM in the browser.  If the data's not 
>> that big, this is fine.  But if it's the catalog of a hardware chain or 
>> something else huge, you probably be doing it in pages.  Sometimes it's 
>> natural.  For example, I once did and event calendar for a school system.  I 
>> loaded a month at a time, and filtering within the month was peppy, but to 
>> go to a different month required a reload, and you couldn't show stuff from 
>> multiple months at one time.
>> Use an AJAX request to replace part of the DOM with filtered data.  (The 
>> iframe hack is very much like this.)  If the data is most of your page, this 
>> isn't much more light weight than option 1, but the user doesn't see the 
>> page reload, which seems to count for style points.
>> There are JavaScript "frameworks" (e.g. VueJS) that will help you with 2 and 
>> especially 3, but you have to learn how to use the framework, and how to 
>> connect it to Django.  Those are useful things to learn, but they're not 
>> overnight reads, and can have performance pitfalls.
>> 
>> Good luck, Bill
>> 
>>> On Wed, Feb 12, 2020 at 3:17 PM Phil Kauffman <[email protected]> wrote:
>>> Hello, I am struggling with trying to filter child objects based on parent 
>>> object selection on index.html (sites.html in example). On my sites.html, I 
>>> list the office sites and a button to click for each, upon clicking I want 
>>> to load the profile list for users only at that site, presently it's 
>>> loading all profiles for all sites, which I assume is because the profiles 
>>> are loaded statically no matter which button is clicked on sites.html.
>>> 
>>> I'm thinking I need a JS onclick event?
>>> 
>>> models.py:
>>> class Site(models.Model):
>>> 
>>>     name = models.CharField(max_length=50)
>>>     date = models.DateField()
>>>     manager = models.CharField(max_length=50)
>>>     
>>>     def save(self, *args, **kwargs):
>>>         super(Site, self).save(*args, **kwargs)
>>>          
>>> class Profile(models.Model):
>>>     Days = '1st'
>>>     Mids = '2nd'
>>>     Nights = '3rd'
>>>     Work_Schedule_Choices = [
>>>       (Days, 'Day Shift'),
>>>       (Mids, 'Mid Shift'),
>>>       (Nights, 'Night Shift'),
>>>     ]   
>>>     sitename = models.ForeignKey(Site, on_delete=models.CASCADE)
>>>     title = models.CharField(max_length=100)
>>>     schedule = 
>>> models.CharField(max_length=3,choices=Work_Schedule_Choices,default=Days)
>>>     totalusers = models.PositiveSmallIntegerField(default=1, 
>>> validators=[MinValueValidator(1), MaxValueValidator(50)])
>>> 
>>> 
>>> 
>>> views.py:
>>> def sites(request):
>>>     sitelist = Site.objects.all()
>>>     return render (request, 'App/sites.html', {'sitelist' : sitelist})
>>> 
>>> def sitedetail(request):
>>>     site = Site.objects.filter()
>>>     if request.method == 'GET':
>>>         return render(request, 'App/site-detail.html', {'site': site, 
>>> 'profile_set': Profile.objects.all()})
>>> 
>>> 
>>> sites.html (index)
>>> {% extends 'App\base.html' %}
>>> {% load crispy_forms_tags %}
>>> {% block title %}Site Home{% endblock %}
>>> {% block content %}
>>>     {% for Site in sitelist %}
>>> <div <div  class="container">
>>>     <div  class="row justify-content-center">
>>>         <h5>{{ Site.name }}</h5>
>>>         <a href="{% url 'site-detail' %}" class="btn">View</a>
>>>       </div>
>>>     </div>
>>>     {% empty %}
>>>     <div class="noproject-wrapper center">
>>>       <h3 class="grey-text">Sorry, you haven't created any sites yet.</h3>
>>>       <a href="{% url 'site-create' %}" class="btn-large grey">
>>>         <i class="material-icons white-text left">Add Site</i>
>>>         <span class="bold">Add Site</span>
>>>       </a>
>>>     </div>
>>>     {% endfor %}
>>>   </div>
>>> {% endblock %}
>>> 
>>> 
>>> site-detail.html
>>> {% extends 'App\base.html' %}
>>> {% load crispy_forms_tags %}
>>> {% block title %}Site Detail{% endblock %}
>>> {% block content %}
>>> <h1>This web form sucks</h1>
>>>  <ul>
>>>   {% for profile in profile_set  %}
>>>   <li>{{ profile.title }}</li>
>>>   {% endfor %}
>>>  </ul>
>>> {% endblock %}
>>> 
>>> 
>>> 
>>> 
>>> 
>>> 
>>> -- 
>>> You received this message because you are subscribed to the Google Groups 
>>> "Django users" group.
>>> To unsubscribe from this group and stop receiving emails from it, send an 
>>> email to [email protected].
>>> To view this discussion on the web visit 
>>> https://groups.google.com/d/msgid/django-users/b4bd97c3-1a36-436d-823a-b4f7003a29d0%40googlegroups.com.
> 
> -- 
> You received this message because you are subscribed to the Google Groups 
> "Django users" group.
> To unsubscribe from this group and stop receiving emails from it, send an 
> email to [email protected].
> To view this discussion on the web visit 
> https://groups.google.com/d/msgid/django-users/1c6cca2a-81bc-4df8-a714-344f6ad9081f%40googlegroups.com.

-- 
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-users/C8A3A1A1-A673-43E3-A5B5-47E41A2F9C7B%40gmail.com.

Reply via email to