But that filter will just give me a list of tuples with
RaidPhysicalDrive's values.  I want to understand how I can include
in the list I send to my template, the *additional* values for system
name, storage name, and array name, so I can display/dump
all the info in a table.  I don't want to put in a link to RPD's
in_array value and force the user to drill down two layers to get to
the system name.
I don't want to also pass in lists of array names, storage names, and
system names and do nested forloops with if's to check -- that's
the whole point of a well crafted select statement, so that you have
your info all sorted out and ready to go.

On Aug 16, 6:46 pm, Alec Shaner <asha...@chumpland.org> wrote:
> 1. What is your code for doing the filters?  If you want to start with
> physical drives it would be something like:
>
> RaidPhysicalDrive.objects.filter(in_array__in_storage__in_system__id=<id>)
>
> 2. In your template you've referenced pd.in_array_id, but don't you just
>want pd.in_array if you're wanting to follow the FK to get RaidArray fields,
> e.g.,
>
> <td>{{ 
> pd.in_array.in_storage.in_system.name<http://pd.in_array_id.storage.in_system.name/>}}</td>
>
> On Mon, Aug 16, 2010 at 8:04 PM, Cindy <tit...@gmail.com> wrote:
> > I'm having some trouble constructing a filter that's intended to work
> > across multiple tables with selected fields.  Here's a simplified
> > outline of my models:
>
> > class System(models.Model):
> >    name = models.CharField(max_length=16)
> >    domain = models.CharField(max_length=255, default='example.com')
>
> > class RaidStorage(models.Model):
> >    in_system = models.ForeignKey(System)
> >    name = models.CharField(max_length=25)
>
> > class RaidArray(models.Model):
> >    in_storage = models.ForeignKey(RaidStorage)
> >    name = models.CharField(max_length=25)
>
> > class RaidPhysicalDrive(models.Model):
> >    in_array = models.ForeignKey(RaidArray)
> >    name = models.CharField(max_length=25)
> >    size = models.IntegerField(null=True, blank=True)
> >    serial = models.CharField(max_length=25)
> >    model = models.CharField(max_length=25)
>
> > Now, given a system id, I want to list all the physical drives from it
> > along with info from the related tables.  I would like something like
>
> > select System.name, RaidStorage.name, RaidArray.name,
> > RaidPhysicalDrive.name, RaidPhysicalDrive.serial,
> > RaidPhysicalDrive.model from System, RaidStorage, RaidArray,
> > RaidPhysicalDrive where RaidPhysicalDrive.in_array=RaidAarray.id and
> > RaidArray.in_storaage = RaidStorage.id and RaidStorage.in_system=id
> > (etc)
>
> > I'm having a good deal of trouble coming up with the filters for
> > this.  I'm thinking that .values() and possibly .select_related() are
> > key here, but so far I've failed at putting together anything that
> > gives me the results I want (a list of physical drives associated with
> > the selected system).   The filter examples through the tutorials and
> > such seem to all assume select *, and there's very little on dealing
> > with grouping selective fields from multiple tables that I've found.
>
> > Part of the issue might be in the template as well; If I cheat and
> > send it the correct list, I can't access part of the information I
> > want:
>
> > {% for pd in pd_list %}
> > <tr>
> >    <td>{{ pd.in_array_id.storage.in_system.name }}</td>
> >    <td>{{ pd.in_array_id.in_storage.name }}</td>
> >    <td>{{ pd.in_array_id.name }}</td>
> >    <td>{{ pd.name }}</td>
> >    <td>{{ pd.serial }}</td>
> >    <td>{{ pd.model }}</td>
> > </tr>
> > {% endfor %}
>
> > results in the first three columns of the table being empty...
> > templates don't seem to "follow" back the way they do in views.py,
> > etc.  So I'm sure I need to create a dictionary or list from the
> > original views.py def to pass to the template but as I say, I'm not
> > sure of how to use .values or .select_related (or whatever else item
> > I'm overlooking).
>
> > I did search through the group a bit, but didn't find anything
> > directly helpful.
>
> > Thanks!
> > --Cindy
>
> > --
> > You received this message because you are subscribed to the Google Groups
> > "Django users" group.
> > To post to this group, send email to django-us...@googlegroups.com.
> > To unsubscribe from this group, send email to
> > django-users+unsubscr...@googlegroups.com<django-users%2bunsubscr...@googlegroups.com>
> > .
> > For more options, visit this group at
> >http://groups.google.com/group/django-users?hl=en.

-- 
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To post to this group, send email to django-us...@googlegroups.com.
To unsubscribe from this group, send email to 
django-users+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/django-users?hl=en.

Reply via email to