Аргумент DRF — int() должен быть строкой, байтоподобным объектом или числом, а не ‘DeferredAttribute’

#django-models #django-rest-framework #django-views

#django-models #django-rest-framework #django-views

Вопрос:

У меня есть два Json-данных, и я создал отдельную конечную точку для сохранения данных ниже json в базе данных, и у меня есть общая связанная модель и сериализатор, и я могу сохранять данные без каких-либо проблем с этим, и, пожалуйста, прокрутите вниз для получения подробной информации о проблеме

Альбом json:

   {
    "id": "dsadad-dsds-gfgf",
    "title": "Album name",
    "description": "Albumdescription",
    "url": "https://example.com/albums/dsadad-dsds-gfgf"
 }
 

Альбомы модели:

 class Albums(models.Model):
    id = models.CharField(max_length=100,primary_key=True)
    title = models.CharField(max_length=20)
    url = models.CharField(max_length=100)
    
 

Сериализатор альбомов :

 class AlbumsSerializer(serializers.HyperlinkedModelSerializer):
    tracks= serializers.HyperlinkedRelatedField(
        many=True,
        read_only=True,
        view_name='people-detail'
    )
    url = serializers.CharField()

    class Meta:
        model = models.Albums
        fields = ('id', 'title','tracks','url')

    
 

У меня есть вторые данные json, как показано ниже, которые необходимо сохранить в базе данных, определив связь между атрибутом albums в приведенном ниже json с сохраненными выше данными модели, поэтому ниже приведен код

 {
    "id": "dsdsd-fdfd0-jkjh",
    "name": "erika",
    "albums": [
      "https://example.com/albums/dsadad-dsds-gfgf"
    ],
    "url": "https://example.com/track/dsdsd-fdfd0-jkjh"
  }
  
 

Модель:

 class Tracks(models.Model):
    id = models.CharField(max_length=100,primary_key=True)
    name = models.CharField(max_length=20)
    albums= models.ForeignKey(Albums,related_name='tracks',on_delete=models.CASCADE)
    
    
 

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

 class TrackSerializer(serializers.ModelSerializer):
  
    albums= serializers.ListField()

    class Meta:
        model = models.Tracks
        fields = ('id', 'name','albums')

    def create(self, validated_data):
        print(validated_data)
        albums_data = validated_data.pop('albums')
        for album_url in albums_data:
            movie = models.Albums.objects.get(url=album_url)
            models.Tracks.objects.create(albums=movie, **validated_data)
        return models.Tracks
        
        
 

представления — это просто modelviewset для каждого отдельного сериализатора

Я получаю сообщение об ошибке, а также, пожалуйста, посоветуйте, есть ли что-то неправильное в подходе, чувствуя что-то неправильное в методе Create, когда URL-адреса присутствуют в данных json для идентификации родительского и дочернего отношения, это правильный подход?

TypeError: аргумент int() должен быть строкой, байтоподобным объектом или числом, а не ‘DeferredAttribute’

Комментарии:

1. Не могли бы вы поделиться всей трассировкой исключения, пожалуйста?

2. эта строка неверна return models.People . Вам нужно вернуть созданный экземпляр, а не класс модели. Я не уверен, где вы используете этот сериализатор, но поскольку вы создаете несколько объектов people, вы можете вернуть последний экземпляр. Кроме того, вероятно, лучше импортировать отдельные классы модели в ваше пространство имен вместо всего models файла

3. Спасибо вам обоим за ответ на мой запрос, я использую serializer в viewset , и я взял последний экземпляр объекта people, проблема решена. Спасибо, Кен, проблема решена