代码之家  ›  专栏  ›  技术社区  ›  Dicky Raambo

访问OneToOne关系并传递到django中的模板

  •  0
  • Dicky Raambo  · 技术社区  · 6 年前

    我正在尝试建立一对一的关系,但对我来说没有用。

    根据本文件 https://docs.djangoproject.com/en/2.0/topics/db/examples/one_to_one/

    A Restaurant can access its place:
    
    >>> r.place
    <Place: Demon Dogs the place>
    A Place can access its restaurant, if available:
    
    >>> p1.restaurant
    <Restaurant: Demon Dogs the restaurant>
    

    这是我的 model.py

    class Employee(models.Model):
        idemp = models.CharField(max_length=100)
        name = models.CharField(max_length=100)
    
        def __str__(self):
            return self.name
    
    class EmployeeDetail(models.Model):
        nationality = models.CharField(max_length=50)
        employee = models.OneToOneField(Employee,on_delete=models.CASCADE,primary_key=True,)
    

    这是我的 view.py

    class EmployeeListView(ListView):
        context_object_name = 'employees'
        model = models.Employee
    

    这是我的 employee_list.html

    {% for employee in employees %}
        <tr>
            <td>{{ employee.idemp }}</td>
            <td>{{ employee.name }}</td>
            <td>{{ employee.nationality }}</td>
        </tr>
    {% endfor %}
    

    运行并仅显示结果 idemp name

    我错过什么了吗?。。。

    而且

    我把桌子分成两张 employee employe details 因为我可以访问数据,并且只显示员工列表的4列,其他(详细信息)将访问所有列。

    哪个更好?。。。

    1. use one table for many columns

    2. split the table into 2 or more for many columns (就像我的案子一样 受雇者 employeedetails )

    请解释 why because ,我的大脑有点慢。

    非常感谢

    1 回复  |  直到 6 年前
        1
  •  4
  •   neverwalkaloner    6 年前

    您可以访问反向 OneToOne 具有的字段 modelname 属性 employeedetail 在你的情况下。获取 nationality 你需要这样做 employee.employeedetail.nationality 。请尝试以下操作:

    {% for employee in employees %}
        <tr>
            <td>{{ employee.idemp }}</td>
            <td>{{ employee.name }}</td>
            <td>{{ employee.employeedetail.nationality }}</td>
        </tr>
    {% endfor %}