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
Post a Comment