Django models 在django模型中,两个依赖模型如何可能连接在一起,从而我可以从这两个模型中提取所有数据?
我正在为我的项目组写一个博客网站。在某个阶段,我现在被堆积起来,youtube和stackoverfolow上的开源解决方案都没有解决我的问题。我知道这很简单,但由于我在使用django框架模型系统时效率不高,所以我无法解决它。 我有4个与ForeignKey链接的模型。在这4个模型中,我想使用其中的两个进行详细查看。我无法从两个模型中填充数据 一个型号名称“Term_t”如下所示:Django models 在django模型中,两个依赖模型如何可能连接在一起,从而我可以从这两个模型中提取所有数据?,django-models,django-queryset,Django Models,Django Queryset,我正在为我的项目组写一个博客网站。在某个阶段,我现在被堆积起来,youtube和stackoverfolow上的开源解决方案都没有解决我的问题。我知道这很简单,但由于我在使用django框架模型系统时效率不高,所以我无法解决它。 我有4个与ForeignKey链接的模型。在这4个模型中,我想使用其中的两个进行详细查看。我无法从两个模型中填充数据 一个型号名称“Term_t”如下所示: class Term_t(models.Model): user = models.ForeignKey
class Term_t(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL, default=1, on_delete=models.CASCADE)
preferred_term = models.CharField(max_length=120)
slug = models.SlugField(unique=True)
definition = models.TextField()
agrovoc_id = models.TextField()
uri = models.TextField()
translation_de = models.TextField()
broader_concept= models.CharField(max_length=120)
states = models.ForeignKey(TermState_t, default=1, on_delete=models.CASCADE)
categories = models.ForeignKey(Category_t, default=1, on_delete=models.CASCADE)
date_created = models.DateTimeField(auto_now_add=True)
updated_on = models.DateTimeField(auto_now=True)
def __unicode__(self):
return self.preferred_term
def __str__(self):
return self.preferred_term
class Meta:
ordering = ['-date_created']
## The other model is :
class AlternateTerm_t(models.Model):
alternate_terms = models.CharField(max_length=120)
pref_term = models.ForeignKey('Term_t', default=1, on_delete=models.CASCADE)
def __str__(self):
return self.alternate_terms
#My views.py is :
from django.shortcuts import render
from .models import Term_t, AlternateTerm_t
from itertools import chain
# Create your views here.
#from django.views import generic
#class TermList(generic.ListView):
#queryset = Term_t.objects.all().order_by("-date_created")
#template_name = 'index.html'
#class TermDetail(generic.DetailView):
#model = Term_t
#template_name = 'term_detail.html'
######################################
def term_list(request):
terms = Term_t.objects.all()
context = {
'term_list': terms
}
return render(request,"index.html", context)
def term_detail(request, slug):
term = Term_t.objects.filter(alternateterm_t__pref_term= 'term_t__preferred_term').values('user','preferred_term','alternateterm_t__alternate_terms','definition','agrovoc_id','uri','translation_de','broader_concept','date_created').get(slug=slug)
context={
'term':term,
}
return render(request, "term_detail.html", context)
user = models.ForeignKey(settings.AUTH_USER_MODEL, default=1, on_delete=models.CASCADE)
preferred_term = models.CharField(max_length=120)
slug = models.SlugField(unique=True)
definition = models.TextField()
agrovoc_id = models.TextField()
uri = models.TextField()
translation_de = models.TextField()
broader_concept= models.CharField(max_length=120)
states = models.ForeignKey(TermState_t, default=1, on_delete=models.CASCADE)
categories = models.ForeignKey(Category_t, default=1, on_delete=models.CASCADE)
date_created = models.DateTimeField(auto_now_add=True)
updated_on = models.DateTimeField(auto_now=True)
My term_detail.html is :
{% extends "base.html" %}
{% block content %}
<style>
.row > .property-label {
float: left;
padding-top: 10px;
padding-bottom: 10px;
padding-left: 15px;
padding-right: 15px;
position: relative;
width: 225px;
}
.row > .property-value-column {
display: inline-block;
width: calc(100% - 225px);
padding-top: 10px;
padding-bottom: 10px;
position: relative;
}
.row > .property_under{
border-bottom: 2px solid #34b1eb;}
body {
font-family: "Helvetica Neue",Helvetica,Arial,sans-serif;
font-size: 14px;
line-height: 1.42857143;
color: #333;
}
.break{
height: 10px;
}
.property-label > .property-click {
border-bottom: 2px dotted #CFCFCF;
}
</style>
<div class="container">
<div class="row">
<div class="col-md-8 card mb-4 mt-3 left top">
<div class="card-body">
<div class="row">
<div class="property-label">
<span class="property-click">PREFERRED TERM</span>
</div>
<div class="property-value-column">
<h1>{% block title %} {{ term.preferred_term }} {% endblock title %}</h1>
</div>
</div>
<div class="row">
<div class="property-label">
<span></span>
</div>
<div class="property-value-column property_under">
<p class=" text-muted">{{ term.user }} | {{ term.date_created }}</p>
</div>
</div>
<div class="row">
<div class="property-label">
<span class="property-click">ALTERNATE TERMS</span>
</div>
<div class="property-value-column property_under">
<p class="card-text ">{{ term.alternate_terms }}</p>
</div>
</div>
<div class="row">
<div class="property-label">
<span class="property-click">DEFINITION</span>
</div>
<div class="property-value-column property_under">
<p class="card-text ">{{ term.definition | safe }}</p>
</div>
</div>
<div class="break"></div>
<div class="row">
<div class="property-label">
<span class="property-click">BROADER CONCEPT</span>
</div>
<div class="property-value-column property_under">
<p class="card-text ">{{ term.broader_concept}}</p>
</div>
</div>
<div class="break"></div>
<div class="row">
<div class="property-label">
<span class="property-click">AGROVOC ID</span>
</div>
<div class="property-value-column property_under">
<p class="card-text ">{{ term.agrovoc_id }}</p>
</div>
</div>
<div class="break"></div>
<div class="row">
<div class="property-label">
<span class="property-click">URI</span>
</div>
<div class="property-value-column property_under">
<p class="card-text ">{{ term.uri }}</p>
</div>
</div>
<div class="break"></div>
<div class="row">
<div class="property-label">
<span class="property-click">DEFINITION (DE)</span>
</div>
<div class="property-value-column property_under">
<p class="card-text ">{{ term.translation_de | safe }}</p>
</div>
</div>
</div>
</div>
{% block sidebar %} {% include 'sidebar.html' %} {% endblock sidebar %}
</div>
</div>
{% endblock %}
我想在我的详细视图中获得备用条款,下图中标记了特定位置:(可能有一个或多个备用条款用于一个首选条款,因此所有备用条款将通过(,)依次插入)
请帮我解决这个问题
问候
ZoOrder我通过在views.py和detail.html中进行一些更改,解决了我的问题:
def term_detail(request, id):
id=id
term = Term_t.objects.filter(id=id)
my_term = AlternateTerm_t.objects.filter(pref_term= id)
context={
'term':term,
'my_term':my_term,
}
return render(request, "term_detail.html", context)
HTML页面编辑:
<div class="row">
<div class="property-label">
<span class="property-click">ALTERNATE TERM</span>
</div>
<div class="property-value-column property_under">
<p class="card-text ">{%for r in my_term %}{{r.alternate_terms}}{% if not forloop.last %}, {% endif %}{% endfor %}</p>
</div>
</div>
替代术语
{%for r in my_term%}{{r.alternate_terms}{%if not forloop.last%},{%endif%}{%endfor%}
输出:
<div class="row">
<div class="property-label">
<span class="property-click">ALTERNATE TERM</span>
</div>
<div class="property-value-column property_under">
<p class="card-text ">{%for r in my_term %}{{r.alternate_terms}}{% if not forloop.last %}, {% endif %}{% endfor %}</p>
</div>
</div>