模型上的Django左连接

模型上的Django左连接,django,django-models,Django,Django Models,假设你有两个模型。让我们把它们命名为计算机和日志文件 我想创建一个联接,以便始终显示所有计算机对象,但如果存在相关的日志文件对象,它也会添加到查询结果中 实现这一目标的最佳方式是什么?关系:一台计算机有一个日志文件。但它可能还没有上传到数据库。仅当我的脚本抛出错误时才能上载 对不起,我的初学者问题,我是Django新手 以下简化模型为例: 型号1:计算机 id(主键) 计算机名 mac地址(唯一) 型号2:日志文件/每台计算机最多一个 id(主键) mac地址 文本字段 所需查询:所有计

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

我想创建一个联接,以便始终显示所有计算机对象,但如果存在相关的日志文件对象,它也会添加到查询结果中

实现这一目标的最佳方式是什么?关系:一台计算机有一个日志文件。但它可能还没有上传到数据库。仅当我的脚本抛出错误时才能上载

对不起,我的初学者问题,我是Django新手

以下简化模型为例:

型号1:计算机

  • id(主键)
  • 计算机名
  • mac地址(唯一)
型号2:日志文件/每台计算机最多一个

  • id(主键)

  • mac地址

  • 文本字段

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

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

  • 选择*
  • 来自计算机
  • 左连接计算机上的日志.mac\u地址=日志文件.mac\u地址

谢谢大家!

我通过使用计算字段找到了解决方法。检查以下链接:

@属性下的所有内容

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

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 %}
对于我的观点

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 %}
{%if connecthor.log_文件%}
{%if connecthor.log_file.view>0%}
{%else%}
{%endif%}
{%else%}
找不到
{%endif%}
这可能会有所帮助