【问题标题】:Django problem with foreginKey in templates模板中foreginKey的Django问题
【发布时间】:2020-05-29 07:47:41
【问题描述】:

我开始学习 Django,但我有疑问。我有这样的代码:

from django.db import models
from django.utils import timezone

class Worker(models.Model):
    firstname = models.CharField(max_length = 32, blank=False, null=False)
    lastname = models.CharField(max_length = 32, blank=False, null=False)

class Computer(models.Model):
    TYPE = {
        (0, 'PC'),
        (1, 'Laptop'),
    }
    workerId = models.ForeignKey(Worker, on_delete=models.SET_NULL, blank=True, null=True)
    prod = models.CharField(max_length = 32, blank=False, null=False)
    type = models.PositiveSmallIntegerField(default=0, choices=TYPE)

如果我想对工人和他们的计算机进行列表,我应该在视图和模板中做什么?一台计算机可以供一个用户使用,也可以不供任何人使用,但一个工作人员可以拥有几台计算机。

我的模板如下所示:

{% block site %}
    {% for work in worker %}
        <p>{{ work.id }} {{ work.fullname }} 
            {{ work.lastname }}</p><br>
            {% if comp.workerId == work.id%}
                {{ comp }}
            {% else %}
                <p>Empty</p>
            {% endif %}
    {% endfor %}
    {% for c in comp %}
        <p>{{ c }}</p>
    {% endfor %}
{% endblock %}

但我总是有“空”。感谢您的帮助

【问题讨论】:

    标签: django


    【解决方案1】:

    您可以在模板中使用for-empty 进行这样的尝试:

    {% for work in worker %}
        <p>{{ work.id }} {{ work.fullname }} 
            {{ work.lastname }}</p><br>
            {% for comp in work.computer_set.all %}
                {{ comp }}
            {% empty %}
                <p>Empty</p>
            {% endfor %}
     {% endfor %}
    

    【讨论】:

      【解决方案2】:

      实际上,我之前已经在 herehere 两个问题中解释过这一点。

      基本上,ForiegnKey 对象是一个键,因为它对于拥有它的类来说是唯一的,这意味着您的计算机只有一个工作人员,请务必将其称为 WORKER,而不是 WORKERID,因为这是 OOP 并且当您访问 @987654324 @,你有一个 Worker 对象,它有 .id.pk,所以称它为 workerId 是没有意义的。

      现在每个工人都有一个.computer_qs,您可以像这样更改它

      workerId = models.ForeignKey(Worker,
                                   on_delete=models.SET_NULL,
                                   blank=True, null=True, related_name="computers")
      

      别忘了叫它worker。现在是 .computers 而不是 .computer_qs

      在您的模板中迭代 workerObj.computers.all 以访问单个计算机对象并从中获得乐趣!

      【讨论】:

      • 很抱歉回答迟了。成功了,非常感谢!
      • 很高兴它有帮助。
      猜你喜欢
      • 1970-01-01
      • 2012-05-14
      • 1970-01-01
      • 2018-05-04
      • 1970-01-01
      • 2010-11-16
      • 2012-01-26
      • 1970-01-01
      • 2010-10-26
      相关资源
      最近更新 更多