python - 无法在同一个 django 视图中使用两个模型
问题描述
我对 django 很陌生,似乎无法在同一个视图中制作两个模型。我已经尝试过 djano 文档中的指南,但似乎无法在 html 中使用两个不同的模型模板。是否有可能我误解了 OneToOneField 的工作原理?
html 只是呈现一个空的 div。帐户模板工作正常。
模型.py
from django.db import models
from django.urls import reverse
from django.contrib.auth.models import User
from django import template
import phonenumbers
# Create your models here.
class Account(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
site = models.CharField(max_length=50, choices=(('all', 'all'), ('danielk', 'danielk')), blank=True)
phoneNumber = models.IntegerField()
birthDate = models.DateField()
streetAdress = models.CharField(max_length=255)
zipCode = models.CharField(max_length=4)
city = models.CharField(max_length=255)
def formatedPhone(self, country=None):
return phonenumbers.parse(Account.phoneNumber, "NO")
def __str__(self):
return "%s %s" % (self.user.first_name, self.user.last_name)
def get_absolute_url(self):
return reverse("account-detail", kwargs={"pk": self.pk})
class Meta:
verbose_name = "Account meta"
verbose_name_plural = "Accounts meta"
class Notes(models.Model):
userNoted = models.OneToOneField(User, on_delete=models.CASCADE)
note = models.TextField()
date = models.DateTimeField((""), auto_now=False, auto_now_add=True)
active = models.BooleanField(default=True)
def get_absolute_url(self):
return reverse("note-detail", kwargs={"pk": self.pk})
class Meta:
verbose_name = "Note detial"
verbose_name_plural = "Notes details"
视图.py
from django.shortcuts import render
from django.http import HttpResponse
from django.views import generic
from django.views.generic.detail import DetailView
from django.views.generic.edit import *
# Create your views here.
from .models import *
#Users
class echoUsersOverview(generic.ListView):
model = Account
template_name = "echo/users/echo-users-overview.html"
class echoUsersDetail(generic.DetailView):
model = Account
template_name = "echo/users/echo-users-detail.html"
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['Account notes'] = Notes.objects.all()
return context
html
<div class="notification is-warning">
{{ notes.note }}
</div>
<nav class="panel">
<p class="panel-heading">
User information
</p>
<label class="panel-block is-paddingless">
<table class="table is-fullwidth">
<tbody>
<tr>
<td style="width: 150px;"><strong>Group</strong></td>
<td>Super Administrator</td>
</tr>
<tr>
<td><strong>Site manager</strong></td>
<td>
{% if account.site == 'all' %}
<span class="tag is-danger">{{account.site}}</span>
{% elif account.site == 'danielk' %}
<span class="tag is-info">{{account.site}}</span>
{% endif %}
</td>
</tr>
<tr>
<td><strong>ID</strong></td>
<td>{{account.id}}</td>
</tr>
<tr>
<td><strong>Birthdate</strong></td>
<td>{{account.birthDate}}</td>
</tr>
<tr>
<td><strong>Phonenumber</strong></td>
<td><a href="tel:{{account.phoneNumber}}">{{account.phoneNumber}}<a></td>
</tr>
<tr>
<td><strong>Email</strong></td>
<td><a href="mailto:{{account.user.email}}">{{account.user.email}}</a></td>
</tr>
<tr>
<td><strong>Streetadress</strong></td>
<td>{{account.streetAdress}}
<br>{{account.zipCode}}
</td>
</tr>
</tbody>
</table>
</label>
</nav>
解决方案
老实说,Notes
如果您只想访问用户的注释,则不需要将模型实例传递给上下文。您可以通过以下方式简单地做到这一点:
<div class="notification is-warning">
{{ object.user.notes }}
</div>
请检查有关此的OneToOneField文档。
推荐阅读
- python - pygame下降数字块游戏并使用鼠标单击数字以添加它们
- three.js - 如何在three.js中获得定向边界框?
- flutter - 如何在颤振中实现“无限”标签栏
- php - 使用 call_user_func 调用函数
- python - 如何制作一个快速的函数式归并排序和生成器
- javascript - p5.js api 应用程序没有返回正确的结果
- javascript - reactjs中对象状态数组中对象的不可变更改数组
- python - 如何使用 Python 播放声音
- machine-learning - 如何保持机器学习模型的相关性?
- php - 在 Laravel Eloquent 中连接表值