Вывод средств в Django Rest API
Я получаю ошибку "У объекта UserRoom нет атрибута 'images'"
models.py
class UserRoom(models.Model):
objects = None
categoty = [
('President Lux', 'President Lux'),
('Lux', 'Lux'),
('Double', 'Double'),
('Standard', 'Standard'),
]
name = models.CharField(max_length=150, choices=categoty, verbose_name='Категория')
room_num = models.CharField(max_length=150,verbose_name='Доступные номера для категории')
about = models.TextField(verbose_name='Подробности')
price = models.IntegerField(verbose_name='Цена')
img360 = models.FileField(verbose_name='Фотография в 360')
class Meta:
verbose_name = 'Номер (About)'
verbose_name_plural = 'Номера (About)'
class UserImg(models.Model):
objects = None
name = models.ForeignKey(UserRoom, on_delete=models.CASCADE, verbose_name='img2')
img = models.FileField(upload_to='User img', verbose_name='Фотография')
class Meta:
verbose_name = 'Фотографию'
verbose_name_plural = 'Фотографии'
views.py
class UserRoomViewSet(ModelViewSet):
permission_classes = [AllowAny]
queryset = UserRoom.objects.all()
serializer_class = UserRoomSer
serializers.py
class UserImgSer(ModelSerializer):
class Meta:
model = UserImg
fields = '__all__'
class UserRoomSer(ModelSerializer):
images = RelatedField(
many=True, queryset=UserImg.objects.all())
class Meta:
model = UserRoom
fields = [
'name', 'room_num', 'about', 'price',
'img360', 'images',
]
urls.py
from rest_framework import routers
router = routers.DefaultRouter()
router.register(r'room', UserRoomViewSet)
urlpatterns = router.urls
пожалуйста, помогите мне с этой проблемой я не могу получить json
ПО ИДЕЕ Я ДОЛЖЕН ВЫГЛЯДЕТЬ ТАК
{
"images": [
{
"name": "",
"img": ""
},
{
"name": "",
"img": ""
}
],
"name": "",
"room_num": "",
"about": "",
"price": "",
"img360": ""
}
ДРУГОЙ ПРОГРАММИСТ ПОМОГ МНЕ И У НЕГО ВСЕ РАБОТАЕТ, НО ПОЧЕМУ У МЕНЯ НЕ РАБОТАЕТ, ПОЖАЛУЙСТА, СКАЖИТЕ, В ЧЕМ МОЯ ПРОБЛЕМА
Ваша проблема кроется здесь:
class Meta:
model = UserRoom
fields = [
'name', 'room_num', 'about', 'price',
'img360', 'images',
]
Вы пытаетесь сослаться на 'images'
как на поле. Но его нет в вашей модели.
Вы можете удалить его.
Альтернативно, вы можете добавить их к вашей модели как ManyToManyField
:
class UserRoom(models.Model):
...
images = models.ManyToManyField('UserRoomSer', ...)
Думаю, вы можете просто установить поле related_name
для получения ссылки из UserRoom
модели.
class UserImg(models.Model):
objects = None
# here I set the related_name attribute in the `name` field
name = models.ForeignKey(UserRoom, on_delete=models.CASCADE, verbose_name='img2', related_name = 'images')
img = models.FileField(upload_to='User img', verbose_name='Фотография')
class Meta:
verbose_name = 'Фотографию'
verbose_name_plural = 'Фотографии'
class Meta:
verbose_name = 'Фотографию'
verbose_name_plural = 'Фотографии'