Django将外键值与另一个模型的属性进行比较

时间:2020-10-15 20:38:01

标签: python django

我对Django还是比较陌生,但是我决定尝试建立自己从事过的个人项目的个人作品集。我已经设置好了,以便您进入主页。从那里,您可以单击一种语言。然后,如果我使用了该语言的框架,则想在屏幕上显示它,或者如果我有一个项目,但我没有使用该语言的框架,那么它也会在此处显示。为此,我设置了从框架到语言以及从JobNoFramework到Language的外键。我已经为Django测试了一个框架对象。如果将比较运算符更改为!=,它将显示出来,但是一旦我将其设为==,它就不起作用,即使我说{{frameworks.language}} - {{languages.language}}也可以使用Python-Python。非常感谢您的帮助。

以下是相关代码:

型号:

from django.db import models
from datetime import date
# Create your models here.
class Language(models.Model):
    language = models.CharField(max_length = 30)
    image = models.ImageField(upload_to='images/')

    def __str__(self):
        return self.language

class Framework(models.Model):
    framework = models.CharField(max_length = 30)
    language = models.ForeignKey(Language, on_delete=models.CASCADE)

    def __str__(self):
        return self.framework

class JobNoFramework(models.Model):
    job = models.CharField(max_length=30)
    language = models.ForeignKey(Language, on_delete=models.CASCADE)
    image = models.ImageField(upload_to='images/')
    summary = models.CharField(max_length=200)
    submissionDate = models.DateField(default = date.today, blank = True)

    def __str__(self):
        return self.job + "\n" + self.summary

class JobYesFramework(models.Model):
    job = models.CharField(max_length=30)
    framework = models.ForeignKey(Framework, on_delete=models.CASCADE)
    image = models.ImageField(upload_to='images/')
    summary = models.CharField(max_length=200)
    submissionDate = models.DateField(default = date.today, blank = True)

    def __str__(self):
        return self.job + "\n" + self.summary

观看次数:

from django.shortcuts import render, get_object_or_404

from .models import Framework, Language, JobNoFramework, JobYesFramework

# Create your views here.
def home(request):
    languages = Language.objects
    return render(request, 'jobs/home.html',{'languages':languages})

def lang_detail(request, lang_id):
    language = get_object_or_404(Language, pk=lang_id)
    projects = JobNoFramework.objects
    frameworks = Framework.objects
    return render(request, 'jobs/language.html', {'languages':language, "projects":projects, "frameworks":frameworks})

模板:

<div class="row">
            {% for frameworks in frameworks.all %}
            {% if frameworks.language == languages.language %} <!-- need help with this line -->
            <div class="col-md-4">
              <div class="card mb-4 box-shadow">

                  <img class="card-img-top" src="{{ frameworks.image.url }}"> <!-- need to add image field -->
                </a>
                <div class="card-body">
                  <center>

                      <p class="card-text">{{ frameworks.framework }}</p>
                  </center>
                </div>
              </div>
            </div>
            {% endif %}
            {% endfor %}
          </div>

1 个答案:

答案 0 :(得分:1)

您的情况应该是:

frameworks.language.language == languages.language

当您执行{{frameworks.language}} - {{languages.language}}时,您已将frameworks.language转换为字符串,这就是为什么它显示“ Python-Python”的原因。在您的情况下,尽管您正在将对象Language与字符串进行比较,但这当然总是错误的。

相关问题