#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, проблема решена. Спасибо, Кен, проблема решена