Поэтому я пытаюсь загрузить несколько изображений с помощью JS / Paw (клиент, идентичный Postman) в конечную точку API Django, созданную django-rest-framework ("DRF"). Я посмотрел на все ответы по StackOverflow, но еще не нашел реализацию, которая работает для меня.
Пока, если я добавлю поле "ad" в мой запрос Paw multipart/form-data
POST, оно просто не будет отображаться, когда я print()
мой validated_data
. Я пытаюсь найти способ отправить все свои данные через Paw / JS в DRF, чтобы он мог создать новый экземпляр Campaign, а также создать несколько объявлений и связать его с недавно созданной кампанией.
Любые предложения приветствуются.
views.py
class UserCampaignCreate(generics.CreateAPIView):
serializer_class = serializers.UserCampaignSerializer
queryset = models.Campaign.objects.all()
parser_classes = (MultiPartParser, FormParser)
models.py
class Campaign(TimeStampedModel):
user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='campaignAsUser')
title = models.CharField(max_length=55)
slug = AutoSlugField(populate_from='title', unique=True, always_update=True)
description = models.CharField(max_length=255, blank=True)
location = models.ManyToManyField(Location, related_name='campaignAsLocation')
start_date = models.DateTimeField()
end_date = models.DateTimeField()
uuid = models.UUIDField(default=uuid.uuid4, editable=False)
def __str__(self):
return '{0}'.format(self.title)
class Ad(TimeStampedModel):
title = models.CharField(max_length=55, blank=False)
image = models.ImageField(upload_to=PathAndUniqueFilename('ad-placement-image/'))
campaign = models.ForeignKey(Campaign, on_delete=models.CASCADE, related_name='adAsCampaign')
uuid = models.UUIDField(default=uuid.uuid4, editable=False)
def __str__(self):
return '{0}'.format(self.title)
serializers.py
class UserCampaignSerializer(serializers.ModelSerializer):
location = LocationSerializer(many=True)
class Meta:
fields = (
'user',
'location',
'title',
'description',
'start_date',
'end_date'
)
model = models.Campaign
# NOTE: To create MANY-TO-MANY and associate :: https://stackoverflow.com/questions/40143267/updating-an-manytomany-field-with-django-rest
def create(self, validated_data):
for k, v in validated_data.items():
print(k, ":", v)
validated_locations = validated_data.pop('location')
campaign = models.Campaign.objects.create(**validated_data)
for location in validated_locations:
location_id = location.pop('id', '')
loc = models.Location.objects.filter(id=location_id)
campaign.location.set(loc)
return campaign