Как установить внешний ключ для каждого файла при загрузке нескольких файлов? - PullRequest
1 голос
/ 04 июня 2019

здесь я загружаю несколько файлов, но у меня возникли некоторые проблемы при добавлении. Внешний ключ не хранится для каждого загруженного файла. Как сохранить внешний ключ для каждого выбранного файла?Cannot assign "<property object at 0x04667960>": "MoreImage.image_title" must be a "Gallery" instance.

модели

class Gallery(models.Model):
    image_title = models.CharField(max_length=100, blank=True, null=True)
    image_date = models.DateField(blank=True, null=True)
    image = models.ImageField(upload_to='gallery', default='default.png')
class MoreImage(models.Model):
    image_title = models.ForeignKey(Gallery, on_delete=models.CASCADE)
    images = models.ImageField(upload_to='moreimage', default='default.png')
    date = models.DateTimeField(auto_now_add=True)

просмотров

def add_more_image(request):
    images = Gallery.objects.all().order_by('-date')
    if request.method == 'POST':
        form = MoreImageForm(request.POST or None, request.FILES or None)
        if form.is_valid():
            more = form.save(commit=False)
            for file in request.FILES.getlist('image'):     
                MoreImage.objects.create(image_title=Gallery.pk, images=file)
                #for field in request.FILES.keys():
                #for form_file in request.FILES.getlist(field):
                    #img = MoreImage(image_title_id=Gallery.pk,images=form_file)
                    #img.save()
            more.save()
            messages.success(request, ' Images added.')
            return redirect('admin:add_gallery')

Форма изображения More

class MoreImageForm(forms.ModelForm):
    class Meta:
        model = MoreImage
        fields = '__all__'

1 Ответ

1 голос
/ 04 июня 2019

Прежде всего, вы не должны звонить Gallery.pk, потому что он ничего не вернет, так как это класс. Это должно быть что-то вроде gallary_instance.pk

и я не думаю, что gallary_instance.pk будет работать для вас, потому что вы установили commit=False, которые мешают сохранить объект в БД.

Попробуйте это,

def add_more_image(request):
    images = Gallery.objects.all().order_by('-date')
    if request.method == 'POST':
        form = MoreImageForm(request.POST or None, request.FILES or None)
        if form.is_valid():
            <b>more = form.save()  # remove commit=False
            for file in request.FILES.getlist('image'):
                MoreImage.objects.create(image_title=more.image_title, images=file)</b>
            messages.success(request, ' Images added.')
            return redirect('admin:add_gallery')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...