J'ai une application django 'test_app'. La page test_app - "domain/test_app /" contient un lien vers une autre page de l'application "Genes". Cela m'amène à "domain/test_app/genes /". Dans cette page j'ai une liste de liens qui proviennent de ma table dans ma base de données django appelée "gene", qui est dans test_app/models.py comme classe Gene. Ce lien vers une autre table appelée "Variants" via l'attribut "gène" comme une clé étrangère.Vue de l'application Django - comment obtenir une entrée de la base de données django dans l'URL et obtenir plus d'informations de la base de données pour la vue?
C'est dans test_app/models.py:
class Gene(models.Model):
gene = models.CharField(primary_key=True, max_length=110)
transcript = models.CharField(max_length=100)
def __str__(self):
return self.gene
class Variant(models.Model):
variant = models.CharField(primary_key=True, max_length=210)
gene = models.ForeignKey(Gene, on_delete=models.CASCADE)
cds = models.CharField(max_length=150)
def __str__(self):
return self.variant
Mes test_app/urls.py urlpatterns ressembler à ceci:
urlpatterns = [
url(r'^$', views.test_app, name='test_app'),
url(r'^genes/$', views.genes, name='genes'),
url(r'^genes/(?P<gene>)', views.variant_info, name='variant_info'),
]
et test_app/views.py ressembler à ceci (lien à test_app/templates/test_app/avec mes modèles dans):
def test_app(request):
template = loader.get_template('test_app/index.html')
return render(request, 'test_app/index.html')
def genes(request):
gene_list = Gene.objects.all()
context = {'gene_list': gene_list}
return render(request, 'test_app/genes.html', context)
def variant_info(request, gene):
variant_info = Variant.objects.filter(gene=gene)
return(request, 'test_app/gene_info.html', {'variant_info': variant_info}
J'ai une liste de gènes dans ma table de gène dans mon base de données. Lors de l'obtention de ces gènes en utilisant 'gene_list = Gene.objects.all()' cela fonctionne bien. Je rends ensuite cette liste à un modèle comme une série de liens sur ma page "domain/test_app/genes". Par exemple, lorsque je clique sur TP53 sur cette page, cela va à "domain/test_app/genes/TP53 /". Cela m'amène à la bonne page.
Cependant, je n'ai clairement pas la regex pour ce correctif comme correct quand je tape plus de chiffres ou de caractères tels que/TP53098120918 il va toujours à la même page. Même quand je mets des gènes '(^ P) $' ça se passe encore et je ne comprends pas pourquoi?
Mais le principal problème que j'ai est d'obtenir l'information de ma table de variantes dans ma base de données et de la rendre à la page de gène spécifique, comme domain/test_app/genes/TP53.
Quand je suis en cliquant sur le TP53 ne passe pas par ma fonction vue « variant_info » comme argument génétique parce que la ligne:
variant_info = Variant.objects.filter(gene=gene)
n'obtient aucune information de la base de données - Je pensais que ce passerait gène = « TP53 » quand je clique sur le lien, et donc ce serait:
variant_info = Variant.objects.filter(gene='TP53')
qui renverrait les informations de la table variant avec le gène TP53 comme. Je ne sais pas comment accéder correctement au TP53 à partir de la fonction des gènes dans views.py.
Dans urls.py, vous devez inclure correctement l'expression régulière, par exemple si vous souhaitez obtenir des gènes par ID: 'url (r '^ genes/(? P \ d +)', views.variant_info, name = 'variant_info'), ' de cette façon, l'identifiant du gène est transmis à la vue, alors vous devriez récupérer les objets variant de cette façon:' variant_info = Variant.objects.filter (gene__id = gene) ' –
abidibo
Je n'ai pas d'identifiant de gène dans ma table. La clé primaire est le nom du gène – trouselife
oh, je vois. C'est assez rare, de toute façon, définir les caractères à correspondre dans l'exp reg: 'url (r '^ gènes/(? P [^ /] +)', views.variant_info, name = 'variant_info')' et puis 'variant_info = Variant.objects.filter (gene__gene = gène)' –
abidibo