Django models 在django模型中,两个依赖模型如何可能连接在一起,从而我可以从这两个模型中提取所有数据?

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

我正在为我的项目组写一个博客网站。在某个阶段,我现在被堆积起来,youtube和stackoverfolow上的开源解决方案都没有解决我的问题。我知道这很简单,但由于我在使用django框架模型系统时效率不高,所以我无法解决它。 我有4个与ForeignKey链接的模型。在这4个模型中,我想使用其中的两个进行详细查看。我无法从两个模型中填充数据

一个型号名称“Term_t”如下所示:

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>