相关疑难解决方法(0)

Django REST Framework中的外键值

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.
我看了这个,但它对我没有帮助.
如何解决?
谢谢!

python django rest django-rest-framework

13
推荐指数
1
解决办法
6331
查看次数

如何在 django rest 框架中获取 id 的外键字段名称

这是我的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)

python django django-rest-framework

6
推荐指数
2
解决办法
4117
查看次数

Django Rest Framework dict字段列表

我正在尝试使用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)

我正在关注文档, …

python django rest dictionary

5
推荐指数
0
解决办法
2673
查看次数

DRF Serializer - 如何返回外键字段?

早上好,

我真的很难解决从 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 字段。 …

django django-rest-framework

4
推荐指数
1
解决办法
2521
查看次数

如何在 Django Rest Framework 中显示字段值而不是外键 id,确保所有字段都像以前一样显示在 DRF HTML 表单上

模型:

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)

python django-rest-framework

1
推荐指数
1
解决办法
3748
查看次数

标签 统计

django ×4

django-rest-framework ×4

python ×4

rest ×2

dictionary ×1