DRF добавление изображений в ForeignKey уже в базе данных - PullRequest
0 голосов
/ 09 марта 2020

Я хочу добавить изображения в список (ForeignKey), который уже будет в моей базе данных.

У меня есть модель Image ..

class Image(models.Model):
    photo = models.ImageField(blank=True, upload_to=get_image_filename)
    listing = models.ForeignKey(Listing, on_delete=models.CASCADE)

ImageSerializer

class ImageSerializer(serializers.HyperlinkedModelSerializer):
    photo = serializers.ImageField(allow_empty_file=True)

    class Meta:
        model = Image
        fields = ('url', 'photo', 'listing', )

   def create(self, data):
    listing, __ = Listing.objects.get_or_create(listing=data["listing"])
    return Image(photo=data["photo"], listing=listing)

ImageViewSet

class ImageViewSet(viewsets.ModelViewSet):
    queryset = Image.objects.all()
    serializer_class = ImageSerializer
    detail_serializer_class = ImageDetailSerializer
    parser_classes = (FormParser, MultiPartParser)

    '''Show detailed Image view'''

    def get_serializer_class(self):
        if self.action == 'retrieve':
            if hasattr(self, 'detail_serializer_class'):
                return self.detail_serializer_class
        return super(ImageViewSet, self).get_serializer_class()

Я попытался переопределить метод создания в сериализатор и метод execute_create в фактическом наборе. Но продолжайте сталкиваться с ошибками. Любой совет в правильном направлении был бы потрясающим ![enter image description here] 1

FieldError в / api / v1 / images /

Невозможно разрешить ключевое слово 'listing' в поле. Варианты выбора: адрес, кондиционер, удобства, приблизительный_квартира, видеоматериал, подвал, город, сообщество, описание, внешний дом, гаражи, отопление, hoa, house_levels, id, изображение, широта, listprice, долгота, lot_size, номерные комнаты, numberfullbaths, numberhalfbaths, хозяйственные постройки, объекты недвижимости , pub_date, roof_type, roomtotal, школы, style_house, налоги, налоговая карта, type_house, unfinished_square_footage, пользователь, user_id, вода, yearbuilt, почтовый индекс, зонирование

Edit

изменен метод создания на ...

def create(self, validated_data):
    listing_data = validated_data.pop('listing')
    image = Image.objects.create(**validated_data)
    image.listing =Listing.objects.get(photo=image, 
                                       listing_data=listing_data)
    return image

Теперь ошибка ...

save () получил неожиданный аргумент ключевого слова 'force_insert'

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...