Автоматически создавать еще одну запись после того, как пользователь публикует данные Django остальные рамки - PullRequest
0 голосов
/ 11 ноября 2019

когда пользователь отправляет домашнее животное, петид будет храниться в таблице «лайков» со значением по умолчанию в numOflikes 0. Я не уверен, как подойти к этому, кроме как сделать 2 почтовых запроса, что кажется утомительным

То, что я пробовал:

отправка запроса на публикацию с домашним животным, а затем получение идентификатора и выполнение другого запроса на публикацию "лайков"

Модель

class pet(models.Model):
    name = models.CharField(max_length=50)



class likes(models.Model):
    petId = models.ForeignKey(
        "pet", on_delete=models.CASCADE, null=True)
    numOflikes = models.PositiveSmallIntegerField(default=0)

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

class PetSerializer(serializers.ModelSerializer):

    class Meta:
        model = pet
        fields = '__all__'

class LikesSerializer(serializers.ModelSerializer):

    class Meta:
        model = likes
        fields = '__all__'


ожидаемое животное

   {
        "id": 1,
        "title": "dog",
    },

лайки

   {
        "id": 1,
        "petid": 1
         "numOflikes": 0
    },

Ответы [ 2 ]

0 голосов
/ 11 ноября 2019

Модель;

class likes(models.Model):
    petId = models.ForeignKey(
        "pet", on_delete=models.CASCADE, null=True)
    numOflikes = models.PositiveSmallIntegerField(default=0)

class pet(models.Model):
    name = models.CharField(max_length=50)

    def save(self, *args, **kwargs):
        created = False
        if self.id is None:
            created = True

        super(pet, self).save(*args, **kwargs)
        if created:
            likes.objects.create(petId=self.id)

    def get_like_count(self):
        return likes.objects.get(petId=self.id).numOflikes

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


from .models import likes
from rest_framework import serializers

class PetSerializer(serializers.ModelSerializer):
    numOflikes = serializers.ReadOnlyField(
        source='get_like_count'
    )

    class Meta:
        model = pet
        fields = '__all__'
0 голосов
/ 11 ноября 2019

Вы можете переопределить метод create() для PetSerializer.

class PetSerializer(serializers.ModelSerializer):

    class Meta:
        model = pet
        fields = '__all__'


    def create(self, validated_data):
        pet_obj = pet.objects.create(name=validated_data['name'])
        likes.objects.create(petId=pet_obj)
        return pet_obj
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...