代码之家  ›  专栏  ›  技术社区  ›  peter

Django左加入模特

  •  0
  • peter  · 技术社区  · 7 年前

    假设你有两个模型。让我们给它们命名为计算机和日志文件。

    我希望进行一个联接,以便a始终显示所有计算机对象,但如果有相关的日志文件对象,它也会添加到查询结果中。

    实现这一目标的最佳方法是什么?关系:一台计算机有一个日志文件。但它可能还没有上传到数据库。只有在脚本引发错误时才会上载。

    很抱歉我的初学者问题,我刚到姜戈。

    以简化模型为例:

    型号1:计算机

    • 身份证(pk)
    • 计算机名称
    • MAC地址(唯一)

    模型2:日志文件 /每台计算机最多一台

    • 身份证(pk)

    • MAC地址

    • 文本字段

    必需查询:列出所有计算机以及日志文件(如果数据库中有)。连接由MAC地址的值进行。

    认为SQL查询如下所示。但是我不能用ORM翻译这个。

    • 选择*
    • 从计算机
    • left join log on computer.mac_address=log_file.mac_address;

    谢谢您!

    1 回复  |  直到 7 年前
        1
  •  0
  •   peter    7 年前

    我用一个计算字段找到了一个工作。检查以下链接:

    How to add a calculated field to a Django model

    下面的一切 @财产

    我添加了一些额外的代码 我的模型 :

    class ConnecThor(models.Model):
    # Incrementing ID (created automatically)
    hostname = models.CharField(max_length=40)
    MAC_address = models.CharField(max_length=17,
                                   default='00.00.00.00.00.00', help_text="Example format: 255.255.255.255",
                                   primary_key=True)
    IP_address = models.CharField(max_length=15, default='000.000.000.000', help_text="Example format: 192.148.0.1")
    config_version = models.CharField(max_length=10, default='000')
    creation_date = models.DateTimeField(auto_now_add=True, null=True,
                                         editable=False)  # timezone.now() gedaan tijdens make migrations
    
    @property
    def log_file(self):
        try:
            return LogFiles.objects.get(MAC_address=self.MAC_address)
        except LogFiles.DoesNotExist:
            print('logfile not found')
    
    class Meta(object):
        db_table = 'connecthor'  # table name
    

    并且 我的观点 :

                                 {% if  connecthor.log_file %}
                                        {% if connecthor.log_file.viewed > 0 %}
                                            <td><a  href="{% url 'show_error_log' connecthor.MAC_address %}"  class="badge badge-teal">Approved</a></td>
                                        {% else %}
                                            <td><a href="{% url 'show_error_log' connecthor.MAC_address %}" class="badge badge-danger">Failed update</a></td>
                                        {% endif %}
                                    {% else %}
                                     <td><label class="badge badge-warning">Not Found</label></td>
                                    {% endif %}
    
    推荐文章