首页 > 解决方案 > 无法在同一个 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>

标签: pythondjango

解决方案


老实说,Notes如果您只想访问用户的注释,则不需要将模型实例传递给上下文。您可以通过以下方式简单地做到这一点:

<div class="notification is-warning">
     {{ object.user.notes }}
</div>

请检查有关此的OneToOneField文档。


推荐阅读