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.
For more options, visit this group at 
http://groups.google.com/group/django-users?hl=en.

Reply via email to