Создать объект с внешним ключом с помощью сериализатора - PullRequest
0 голосов
/ 05 февраля 2020

Итак, я хочу создать объект обратной связи с сериализатором:

class Location(models.Model):
    name = models.CharField(max_length=256)
    img_small = models.CharField(max_length=1024, blank=True, null=True)
    img_large = models.CharField(max_length=1024, blank=True, null=True)

    class Meta:
        managed = True
        db_table = 'location'

class Schedules(models.Model):
    user = models.ForeignKey(Users, models.DO_NOTHING, default=None)
    name = models.CharField(max_length=512, blank=True, null=True)
    location = models.ForeignKey(Location, models.DO_NOTHING, default=None)
    detail = models.TextField(blank=True, null=True)
    start = models.DateField()
    end = models.DateField()
    created = models.DateTimeField(blank=True, null=True)
    modified = models.DateTimeField(blank=True, null=True)

    class Meta:
        managed = True
        db_table = 'schedules'

class Feedbacks(models.Model):
    location = models.ForeignKey(Location, models.DO_NOTHING)
    schedule = models.ForeignKey(Schedules, models.DO_NOTHING)
    start = models.IntegerField(blank=True, null=True)
    end = models.IntegerField(blank=True, null=True)
    created = models.DateTimeField(blank=True, null=True)
    modified = models.DateTimeField(blank=True, null=True)

    class Meta:
        managed = True
        db_table = 'feedbacks'

и классом сериализатора:

class FeedbackSerializer(serializers.ModelSerializer):
    location_id = serializers.PrimaryKeyRelatedField(queryset=Location.objects.all())
    schedule_id = serializers.PrimaryKeyRelatedField(queryset=Schedules.objects.all())
    class Meta:
        model = Feedbacks
        fields = ('location_id', 'schedule_id', 'start', 'end')
        # read_only_fields = ('location_id', 'schedule_id')

Мои данные

{"location_id" : 2, "schedule_id" : 2, "start" : "1", "end" : 2}

проблема в том, что после проверки мои validated_data содержат объект Location и Schedule, а не id, поэтому я не могу вставить и получить эту ошибку

int() argument must be a string, a bytes-like object or a number, not 'Location'

1 Ответ

0 голосов
/ 05 февраля 2020

Если я это сделаю, это тоже работает. Я наполовину смущен.

class FeedbackSerializer(serializers.ModelSerializer):
    location = serializers.PrimaryKeyRelatedField(queryset=Location.objects.all())
    schedule = serializers.PrimaryKeyRelatedField(queryset=Schedules.objects.all())
    class Meta:
        model = Feedbacks
        fields = ('location', 'schedule', 'start', 'end')

...