Внешний ключ с сериализаторами Django REST

#python #django #api #rest

#python #django #API #rest

Вопрос:

У меня возникли проблемы с выяснением, как заставить отношения внешнего ключа работать с моим Django REST api.

У меня есть модель

 from django.db import models
from django.core.validators import RegexValidator



# Create your models here.
class Hero(models.Model):
  alphanumeric = RegexValidator(r'^[0-9a-zA-Z]*

Сериализаторы

 from rest_framework import serializers
from .models import Hero, SideKick

class HeroSerializer(serializers.HyperlinkedModelSerializer):
  sidekicks = serializers.SlugRelatedField(many=True, read_only=True, slug_field='title')

  class Meta:
    model = Hero
    fields = ('name', 'alias', 'sidekicks')

class SideKickSerializer(serializers.HyperlinkedModelSerializer):
  sideKick_name = HeroSerializer()
  
  class Meta:
    model = SideKick
    fields = ('sideKick_name')
 

Вот как выглядит веб-страница api

введите описание изображения здесь

Я довольно новичок в этом, и мне было интересно, как я могу получить возможность выбрать a Hero для создания помощника через веб-страницу API.

каждый раз, когда я создаю героя, поле sidekick остается пустым.

Любая помощь будет оказана.

Ответ №1:

Попробуйте что-нибудь вроде этого :

 class HeroSerializer(serializers.HyperlinkedModelSerializer):
  sidekicks = serializers.SerializerMethodField()

    class Meta:
        model = Hero
        fields = ('name', 'alias', 'sidekicks')

    def get_sidekicks(self, obj):
        sidekicks = []
        SideKick_objects = SideKick.objects.all()
        for f in SideKick_objects:
            features.append({"alphanumeric": f.alphanumeric, "hero": f.hero, "sideKick_name": f.sideKick_name})
        return sidekicks
 

Если вы получаете какую-либо ошибку для "sidekicks = serializers.SerializerMethodField ()"
попробуйте использовать: "сериализаторы.ModelSerializer" вместо "сериализаторов.Hyperlink ModelSerializer"

, 'Only alphanumeric characters are allowed.')
name = models.CharField(max_length=60, blank=True, validators=[alphanumeric])
alias = models.CharField(max_length=60)

def __str__(self):
return self.name

class SideKick(models.Model):
alphanumeric = RegexValidator(r'^[0-9a-zA-Z]*Сериализаторы


Вот как выглядит веб-страница api

введите описание изображения здесь

Я довольно новичок в этом, и мне было интересно, как я могу получить возможность выбрать a Hero для создания помощника через веб-страницу API.

каждый раз, когда я создаю героя, поле sidekick остается пустым.

Любая помощь будет оказана.

Ответ №1:

Попробуйте что-нибудь вроде этого :


Если вы получаете какую-либо ошибку для "sidekicks = serializers.SerializerMethodField ()"
попробуйте использовать: "сериализаторы.ModelSerializer" вместо "сериализаторов.Hyperlink ModelSerializer"

, 'Only alphanumeric characters are allowed.')
hero = models.ForeignKey(Hero, related_name='sidekicks', on_delete=models.CASCADE)
sideKick_name = models.CharField(max_length=60, validators=[alphanumeric])

def __str__(self):
return self.sideKick_name
Сериализаторы


Вот как выглядит веб-страница api

введите описание изображения здесь

Я довольно новичок в этом, и мне было интересно, как я могу получить возможность выбрать a Hero для создания помощника через веб-страницу API.

каждый раз, когда я создаю героя, поле sidekick остается пустым.

Любая помощь будет оказана.

Ответ №1:

Попробуйте что-нибудь вроде этого :


Если вы получаете какую-либо ошибку для «sidekicks = serializers.SerializerMethodField ()»
попробуйте использовать: «сериализаторы.ModelSerializer» вместо «сериализаторов.Hyperlink ModelSerializer»