models.py:
class Station(models.Model):
station = models.CharField()
class Flat(models.Model):
station = models.ForeignKey(Station, related_name="metro")
# another fields
Run Code Online (Sandbox Code Playgroud)
然后在serializers.py中:
class StationSerializer(serializers.ModelSerializer):
station = serializers.RelatedField(read_only=True)
class Meta:
model = Station
class FlatSerializer(serializers.ModelSerializer):
station_name = serializers.RelatedField(source='station', read_only=True)
class Meta:
model = Flat
fields = ('station_name',)
Run Code Online (Sandbox Code Playgroud)
我有一个错误:
NotImplementedError:
RelatedField.to_representation()必须实现.如果要从REST框架版本2升级,则可能需要ReadOnlyField.
我看了这个,但它对我没有帮助.
如何解决?
谢谢!
这是我的models.py
from __future__ import unicode_literals
from django.db import models
class User(models.Model):
name = models.CharField(max_length=200)
company_name = models.ForeignKey('Company',on_delete=models.CASCADE,related_name='user')
def __str__(self):
return self.name
class Company(models.Model):
name = models.CharField(max_length=200)
phone_number = models.IntegerField(null=True,blank=True)
def __str__(self):
return self.name
class Catalog(models.Model):
name = models.CharField(max_length=200)
no_of_pcs = models.IntegerField(null=True,blank=True)
per_piece_price = models.DecimalField(null=True,blank=True,max_digits=10,decimal_places=2)
company_name = models.ForeignKey(Company,on_delete=models.CASCADE,related_name='catalog')
def __str__(self):
return self.name
Run Code Online (Sandbox Code Playgroud)
这是我的 serializers.py
from rest_framework import serializers
from .models import *
from django.db.models import Sum,Count
class UserSerializer(serializers.ModelSerializer):
# name = serializers.StringRelatedField()
# company_name = serializers.CharField()
class Meta:
model = User …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用Django REST Framework将两个模型字段序列化为一个dicts列表.
这是我的model.py:
class Translation(models.Model):
translated_term = models.CharField(max_length=200)
translated_meaning = models.TextField()
language = models.CharField(max_length=200)
vocab = models.ForeignKey(Vocab, related_name='translates')
def __unicode__(self):
return '%s: %s' % ( self.language,self.translated_term)
Run Code Online (Sandbox Code Playgroud)
view.py:
class VocabViewSet(viewsets.ModelViewSet):
queryset = Vocab.objects.all()
serializer_class = VocabSerializer
Run Code Online (Sandbox Code Playgroud)
serializer.py:
class VocabSerializer(serializers.ModelSerializer):
...
translates= serializers.StringRelatedField(many=True)
...
class Meta:
model = Vocab
fields = (...,'translates',...)
Run Code Online (Sandbox Code Playgroud)
Api结果:
{
.....
"translates": [
"EN: Abyssal zone"
],
....
}
Run Code Online (Sandbox Code Playgroud)
我的问题是如何将我的翻译设置为这样的词组列表:
预期的API结果:
{
.....
"translates": [
{EN: "Abyssal zone"}
],
....
}
Run Code Online (Sandbox Code Playgroud)
我正在关注文档, …
早上好,
我真的很难解决从 Django Rest Framework API 返回值的问题。
我有两个模型,SirTarget 和 Status。SirTarget 就像一张票证,而 Status 是票证的文本状态标签,对应于处理票证的阶段。
型号如下:
class Status(models.Model):
status_text = models.CharField(max_length=20)
status_open = models.BooleanField(default=1)
def __str__(self):
return self.status_text
class SirTarget(models.Model):
name = models.CharField(max_length=70)
entry_date = models.DateTimeField(auto_now_add=True)
last_name = models.CharField(max_length=40)
first_name = models.CharField(max_length=40)
sir_status = models.ForeignKey(Status, on_delete=models.CASCADE, default=1, related_name='targets')
def __str__(self):
return '%d - %s %s' % (self.id, self.first_name, self.last_name)
Run Code Online (Sandbox Code Playgroud)
我的序列化器如下所示:
class SirTargetStatusSerializer(serializers.ModelSerializer):
status_text = serializers.ReadOnlyField(source='Status.status_text')
class Meta:
model = SirTarget
fields = '__all__'
Run Code Online (Sandbox Code Playgroud)
字段 status_text 不会作为 API 调用的一部分返回。当我返回数据时,我收到状态表的 PK(1、2、3 等),但没有收到 status_text 字段。 …
模型:
class Person(models.Model):
first_name = models.CharField(max_length=20)
last_name = models.CharField(max_length=20)
def __str__(self):
return self.first_name + ' ' + self.last_name
class Gender(models.Model):
gender = models.CharField(max_length=1)
def __str__(self):
return self.gender
class Details(models.Model):
name = models.ForeignKey(Person, on_delete=models.CASCADE)
dob = models.DateField()
gender = models.ForeignKey(Gender, on_delete=models.DO_NOTHING)
Run Code Online (Sandbox Code Playgroud)
序列化器:
class PersonSerializer(serializers.ModelSerializer):
class Meta:
model = Person
fields = '__all__'
class GenderSerializer(serializers.ModelSerializer):
class Meta:
model = Gender
fields = '__all__'
class ProfileSerializer(serializers.ModelSerializer):
class Meta:
model = Profile
fields = ['name', 'dob', 'gender']
Run Code Online (Sandbox Code Playgroud)
目前,我得到的输出低于上面的输出:
[
{
"name": 1,
"dob": "1990-05-19", …Run Code Online (Sandbox Code Playgroud)