【问题标题】:Django Foreign Key model cant display in view JSONDjango外键模型无法在视图JSON中显示
【发布时间】:2018-05-30 03:05:29
【问题描述】:

当我运行此程序时,我得到 JSON 文件,但不包括外键(联系电话),我想显示一个联系人姓名/地址/电子邮件和多个联系号码。

models.py

 from django.db import models

class PhoneBook(models.Model):
    name = models.CharField(max_length=50)
    address = models.CharField(max_length=100, default='address')
    email = models.CharField(max_length=50, default='email')
    note = models.CharField(max_length=100, default='note')
    def __str__(self):  
        return self.name



class ContactNumber(models.Model):  
    number = models.ForeignKey(PhoneBook, related_name="contact_numbers")
    contact_number= models.CharField(max_length=30)

    def __str__(self):  
        return self.contact_number

views.py

  from django.shortcuts import render
from .models import PhoneBook,ContactNumber
from django.http import JsonResponse
from django.views import View

class PhoneBookList(View):
    def get(self,request):
        phonebooklist=list(PhoneBook.objects.values())
        return JsonResponse(phonebooklist,safe=False)

admin.py

from django.contrib import admin
from .models import PhoneBook,ContactNumber

class ContactNumberInline(admin.StackedInline):
    model = ContactNumber

class PhoneBookAdmin(admin.ModelAdmin):
    inlines =[
        ContactNumberInline,
    ]

admin.site.register(PhoneBook)
admin.site.register(ContactNumber)

结果: enter image description here

【问题讨论】:

  • 您的应用架构是否仅基于 API?
  • 您只是在查询PhoneBook 实例。 Django admin 与您的视图无关。
  • @Shift'NTab 是的,仅基于 API。我将其作为后端和前端 reactjs
  • @Selcuk 我的views.py只有一个问题?在我的models.py上怎么样?我应该创建一些函数来显示外键(联系电话)和联系人姓名吗?
  • 我强烈建议看看 django restframework,它让事情变得更容易,

标签: django python-3.x


【解决方案1】:

我也许可以用这种方法来回答。

class PhoneBook(models.Model):
    ....

    def to_json(self):

        contact_numbers = [c.contact_number 
                     for c in self.contact_numbers.all()]

        return { 
            'name':            self.name, 
            'email':           self.email, 
            'address':         self.address,
            'note':            self.note,
            'contact_numbers': contact_numbers
        }

在你看来。

class PhoneBookList(View):
    def get(self,request):
        phonebooklist = PhoneBook.objects.all()
        serialized_data = [pb.to_json() for pb in phonebooklist]
        return JsonResponse(serialized_data, safe=False)

虽然有点肮脏的解决方案

【讨论】:

  • 它现在正在工作,但它说 'dict' 对象没有属性 'contact_numbers' prntscr.com/jodpc8
  • 如果要删除 .values() 我在名称或其他字段中出现错误。 prntscr.com/jodu47
  • 我还是想不通。
  • 我更新了现在应该可以使用的答案,只需用单引号将属性括起来。
  • dapat, gamit ka ng restframework (你必须,使用restframework)
猜你喜欢
  • 2020-02-02
  • 2021-02-14
  • 2013-05-15
  • 2018-02-17
  • 2018-04-25
  • 2019-11-11
  • 1970-01-01
  • 1970-01-01
  • 2016-09-14
相关资源
最近更新 更多