Ho un'app Django in cui il mio modello principale ha campi ForeignKey in altre tabelle DB.Django: uso di objects.values () e ottenere dati ForeignKey nel modello
class Bugs(models.Model):
bug_id = models.PositiveIntegerField(primary_key=True)
bug_severity = models.ForeignKey(Bug_severity,null=True)
priority = models.ForeignKey(Priority,null=True)
bug_status = models.ForeignKey(Bug_Status,null=True)
resolution = models.ForeignKey(Resolution,null=True)
etc...
Tutte le tabelle ForeignKey hanno una funzione unicode che restituisce il nome che si desidera visualizzare nel modello.
class Priority(models.Model):
value = models.CharField(max_length=64)
sortkey = models.PositiveSmallIntegerField()
isactive = models.NullBooleanField()
visibility_value_id = models.SmallIntegerField(null=True,blank=True)
def __unicode__(self):
return self.value
Nella vista, sono in esecuzione la query come:
bugs = Bugs.objects.filter(active=True).order_by('priority__sortkey','bug_severity__sortke
Nel modello, posso scorrere attraverso di loro, e visualizzare correttamente il valore ForeignKey.
{% for bug in bugs %}
<tr class="bugrow" >
<td>{{bug.bug_id}}</td>
<td>{{bug.priority}}</td>
<td>{{bug.bug_severity}}</td>
<td>{{bug.bug_status}}</td>
<td>{{bug.resolution}}</td>
Il problema che sto avendo è che ho bisogno di manipolare i dati Bugs prima di inviarlo al modello, in modo da utilizzare i valori() per restituire un dizionario. Quando passo quel dizionario al modello non mostra alcun campo che punta a un ForeignKey.
Sono abbastanza sicuro che il motivo è che i valori restituiscono solo il valore effettivo del database, quindi non può seguire l'FK.
La domanda è: come posso manipolare i dati che lo inviano al modello e seguire ancora la chiave ForeignKey?
Che ha funzionato perfettamente. Giuro di aver letto 10 volte la documentazione di Queryset.values () cercando di capirlo e di non aver mai letto quel blocco di fondo sulle relazioni FK. – zoidberg
Non sentirti male - l'ho perso più volte quando ho iniziato. Personalmente penso che dovrebbe essere un pezzo in evidenza della documentazione, non un ripensamento. –