Я работаю над кодом, который взаимодействует с API моего сайта, но у меня есть некоторые проблемы с Django Rest Framework. Я пытаюсь отправить почтовый запрос на сервер, чтобы создать нового персонажа на основе модели, сериализатора и набора представлений ниже.
####################Serializer####################################
class CharacterSerializer(serializers.HyperlinkedModelSerializer):
relatedTo = PlayerSerializer();
class Meta:
model = Character
fields = '__all__'
#####################################Model#############################################
class Character(models.Model):
characterID = models.CharField(max_length=500);
lastLogin = models.DateTimeField();
relatedTo = models.ForeignKey(Player, on_delete=models.CASCADE)
shouldRun = models.BooleanField(default=True, null=True, blank=True);
def __str__(self):
return self.relatedTo.name + ": " + self.characterID;
def save(self, *args, **kwargs):
if self.relatedTo.lastLogin != None:
self.relatedTo.lastLogin = self.lastLogin;
else:
if self.lastLogin > self.relatedTo.lastLogin:
self.relatedTo.lastLogin = self.lastLogin;
self.shouldRun = True;
else:
self.shouldRun = False;
super().save(*args, **kwargs)
######################################ViewSet########################################
class CharacterViewSet(viewsets.ModelViewSet):
queryset = Character.objects.all()
serializer_class = CharacterSerializer
def get_queryset(self):
queryset = Character.objects.all();
shouldRun = self.request.query_params.get('shouldRun', None)
charID = self.request.query_params.get('charID', None)
name = self.request.query_params.get('name', None)
if charID is not None:
queryset = queryset.filter(characterID=charID);
if shouldRun is not None:
queryset = queryset.filter(shouldRun=shouldRun);
if name is not None:
queryset = queryset.filter(relatedTo__name=name);
return queryset;
Проблема заключается в том, что я должен включить объект Player, с которым связан персонаж, при публикации объекта. Я также включил информацию об игроке ниже.
####################Serializer####################################
class PlayerSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = Player
fields = '__all__'
#####################################Model#############################################
class Player(models.Model):
tags = models.IntegerField(default=0, null=True, blank=True);
tabs = models.IntegerField(default=0, null=True, blank=True);
points = models.IntegerField(default=0, null=True, blank=True);
membershipId = models.CharField(max_length=500);
membershipType = models.CharField(max_length=500);
memberType = models.CharField(max_length=500);
name = models.CharField(max_length=500);
slug = models.SlugField(max_length=50, unique=True, null=True, blank=True);
lastLogin = models.DateTimeField(blank=True, null=True);
def _get_unique_slug(self):
slug = slugify(self.name)
unique_slug = slug
num = 1
while Player.objects.filter(slug=unique_slug).exists():
unique_slug = '{}-{}'.format(slug, num)
num += 1
return unique_slug
def save(self, *args, **kwargs):
if not self.slug:
self.slug = self._get_unique_slug()
super().save(*args, **kwargs)
def __str__(self):
return self.name
######################################ViewSet########################################
class PlayerViewSet(viewsets.ModelViewSet):
queryset = Player.objects.all()
serializer_class = PlayerSerializer
def get_queryset(self):
queryset = Player.objects.all();
user = self.request.query_params.get('name', None)
if user is not None:
queryset = queryset.filter(name=user);
return queryset;
При попытке опубликовать любой символ появляется сообщение об ошибке, в котором говорится, что поле relatedTo является обязательным, несмотря на то, что оно включено в запрос на публикацию. Я пробовал множество различных способов включить его в запрос post, включая передачу URL объекта Player, его имени, слага и даже самого объекта. Однако ничего не получилось, и я всегда получаю одно и то же сообщение об ошибке каждый раз. Я просмотрел некоторые другие учебники и вопросы и ответы здесь, но все, что я могу найти, это примеры, когда люди создают как обычный объект, так и вложенный объект при вызове post, тогда как я просто хотите создать объект персонажа и связать его с уже существующим персонажем. Любая помощь будет принята с благодарностью, и я могу опубликовать больше кода, если это необходимо.