python - How to join two tables by keys in django queryset -


i have 2 tables fk in 1 of them.

parent:

+----+---------+ | id |  name   | +----+---------+ |  1 | test #1 | |  2 | test #2 | |  3 | test #3 | +----+---------+ 

and child:

+----+---------+-----------+ | id | traffic | parent_id | +----+---------+-----------+ |  1 |    1000 |         1 | |  2 |    2000 |         3 | +----+---------+-----------+ 

i need make queryset form join tables keys, like:

select p.parent_id, p.traffic, c.name child c, parent p c.parent_id = p.id 

is there simple way it?

edit: ok, i'll show real sample need have. there 2 models server , resources:

class server(models.model):     public_name = models.charfield(_(u'public name'),                                    max_length=60,                                    blank=false,                                    null=false,                                    unique=false)     server_ident = models.charfield(_(u'server identificator'),                                     max_length=100,                                     blank=false,                                     null=false,                                     unique=true)     class meta:         db_table = 'server'         ordering = ('public_name',)         abstract = false      def __unicode__(self):         return self.public_name 

and:

class resources(models.model):     server = models.foreignkey(server,                                on_delete=models.cascade)     traffic_left = models.floatfield(_(u'traffic left'),                                      blank=false,                                      null=false,                                      default=0.0)     requests_left = models.integerfield(_(u'requests left'),                                         blank=false,                                         null=false,                                         default=0)     class meta:         db_table = 'resources'         abstract = false 

form:

class projectnewform(forms.form):     servers_query = resources.objects.all()........     project_name = forms.charfield(required=true,                                    min_length=2,                                    max_length=14,                                    label=_(u'project name'))     project_description = forms.charfield(required=true,                                           max_length=2000,                                           widget=forms.textarea(                                               attrs={'rows': 4}                                           ),                                           label=_(u'project description'))      server = forms.modelchoicefield(queryset=servers_query,                                     required=true,                                     initial=0,                                     widget=forms.select,                                     label=_(u'server'))     class meta:         fields = [             'project_name',             'project_description',             'server',         ] 

i need show on template selectbox ("server" field projectnewform) contains public_name server model text option tag , resources.server.id value.

finaly found how (thanks ppl pyha forum)

form:

def get_server_list():     return resources.objects.all().values_list('server_id',                                                'server__public_name')  class projectnewform(forms.form):     project_name = forms.charfield(required=true,                                    min_length=2,                                    max_length=14,                                    label=_(u'project name'))     project_description = forms.charfield(required=true,                                           max_length=2000,                                           widget=forms.textarea(                                               attrs={'rows': 4}                                           ),                                           label=_(u'project description'))     server = forms.field(required=true,                          widget=forms.select,                          label=_(u'server'))      class meta:         fields = [             'project_name',             'project_description',             'server',         ]      def __init__(self, *args, **kwargs):         kwargs.setdefault('label_suffix', '')         super(projectnewform, self).__init__(*args, **kwargs)         self.fields['server'] = \             forms.choicefield(choices=                               [(o[0], str(o[1])) o in get_server_list()],                               initial=1                               ) 

so, can use server field in template like:

{% render_field form.server class="form-control required" %} 

and formed result:

<select class="form-control required" name="server">   <option value="1">test #1</option>   <option value="3">test #3</option> </select> 

i'm not sure, maybe there better solution kind of task, sample works me.


Comments