无法文本比较 Django 模型字段



i在Django中设置了一个"报告"模型,该模型表示上传到网站的特定报告。该模型与" Usertechnology"模型有外国关联关系,这是最终用户可以访问上传报告的所有可用方式的列表。

我正在在index.html页面上显示这些报告和一些有关它们的信息。我想将传递的URL转换为我们根据特定报告的" USERTECHNOLOGY"值链接报告的位置。

试图将报告的Usertechnology价值与任何事物进行比较时,问题就会出现。例如,如果我只显示 {{ report.UserTechnology }},它的工作正常,并带有" filemanager"的示例值。但是,如果我尝试{% "file" in report.UserTechnology %}{% report.UserTechnology == "FileManager %}之类的东西,它总是会返回false。

我认为问题是我没有比较我认为要与外国关系打交道时要比较的内容,但是我不确定如何访问USERTECHNOLOGY.NAME以外的特定报告。Usertechnology。

models.py:

class Report(models.Model):
    Name = models.CharField(max_length=200, default=None, null=True)
    LastUpdated = models.DateTimeField('date published', default=None, 
    null=True)
    SharePointURL = models.CharField(max_length=500,default=None, null=True)
    FileManagerLocation = models.TextField(default=None, null=True)
    ReportText = models.CharField(max_length=400, default=None, null=True)
    ReportImage = models.ImageField(default=None, null=True)
    Category = models.ForeignKey(Category, default=None, null=True, 
    on_delete=models.CASCADE)
    UserTechnology = models.ForeignKey(UserTechnology, default=None, 
    null=True, on_delete=models.CASCADE)
    def __str__(self):
        return self.Name
class UserTechnology(models.Model):
    Name = models.CharField(max_length=50, default=None, null=True)
    def __str__(self):
        return self.Name

index.html:

{% for report in reports %}
    {% if forloop.counter0|divisibleby:4 %} <div class="row"> {%  endif %}
        <div class="col-lg-3 col-md-4 col-sm-6 portfolio-item">
            <div class="card h-100">
                <a href="{{ report.SharePointURL }}" target="_blank"><img class="card-img-top" id="reportImage" src="{{ report.ReportImage.url }}" alt=""></a>
                <div class="card-body">
                    <h4 class="card-title">
                        <a href="{{ report.SharePointURL }}" target="_blank">{{ report.Name }}</a>
                    </h4>
                    <p class="card-text">{{ report.ReportText }}</p>
                </div>
            </div>
        </div> <!-- portfolio-item -->
{%  if forloop.counter|divisibleby:4 or forloop.last %}</div><!-- row closing --><hr>{%  endif %}
{% endfor %}

report.UserTechnology是外国键,它指向整个Usertechnology对象。如果要与字符串进行比较,则需要与对象上的一个字段进行比较:

{% if report.UserTechnology.Name == "FileManager %}

当您在模板中渲染report.usertechnology时,django templating语言隐含地返回隐藏的类方法 str> str> str 在usertechnology上,但这不是您的'对平等的比较。

如果要将report.usertechnology与字符串进行比较,则需要指定相应的属性。

ie,report.usertechnology.name =='filemanager'。

当您比较report.usertechnology与" filemanager"时,您正在比较report.usertechnology对象。&lt;Usertechnology:2> =='FileManager'是错误的。

看到此Live的一种好方法是在您的代码中使用堆栈跟踪。

在您的视图逻辑中您可以添加import pdb; pdb.set_trace()。当您运行代码时,服务器将在此时停止,尝试针对报告对象运行一些打印语句。

最新更新