Можете ли вы заставить выпадающее окно формы Django принимать модель в качестве вариантов выбора?

У меня есть сайт недвижимости, где я пытаюсь иметь возможность загружать несколько фотографий к одной "собственности", не проходя через панель администратора django (чтобы я мог выбирать несколько фотографий)

Текущий вид для пользовательской формы

Я могу выбрать несколько файлов, загрузить их в папку 'uploads' и могу видеть их в панели администратора для баз данных. Проблема в том, что имя свойства из формы, которую я создал, не связывает объект Property с объектами Property Photos. Это просто нулевое значение. Когда я нажимаю на объект Property Photo, только тогда он присваивает ему объект Property.

Свойства фото объектов ДО

Свойство Фото объект Как только я нажимаю на него и нажимаю сохранить

Свойство Фото объект После

Как мне получить возможность выбрать (с помощью выпадающего списка) объект недвижимости из всех моих объектов недвижимости в виде списка и назначить загруженные фотографии этому объекту недвижимости?


Ниже приведены мои: html форма, models.py, views.py и forms.py

photo_upload.html

<body>
    <form action=""
          method="POST"
          enctype="multipart/form-data">
      {% csrf_token %}
      <div class="fs-1">Photo Upload</div>
      {{ image_form }}
      <button>Upload</button>
    </form>
</body>

models.py

class Property(models.Model):
    class Meta:
        verbose_name_plural = 'Properties'

    address = models.CharField(max_length=150)
    slug = models.SlugField(unique=True, )

    date = models.DateField(auto_now=True)

    listing_status = models.ForeignKey(ListingStatus,
                                       on_delete=models.SET_NULL,
                                       null=True,
                                       blank=True,
                                       related_name='property')

    css_file = models.ForeignKey(CssFile,
                                 on_delete=models.SET_NULL,
                                 null=True,
                                 related_name='property')

    agent = models.ForeignKey(Agent,
                              on_delete=models.SET_NULL,
                              null=True,
                              related_name='property')

    def __str__(self):
        return self.address


class PropPhoto(models.Model):
    class Meta:
        verbose_name_plural = 'Property Photos'

    property_name = models.ForeignKey(Property,
                                      on_delete=models.CASCADE,
                                      null=True,
                                      default='',
                                      related_name='property')
    prop_photo = models.ImageField(upload_to='property_photos',
                                   default='', )

views.py

def images_upload(request):
    if request.method == 'POST':
        image_form = ImageUploadsForm(request.POST, request.FILES)
        if image_form.is_valid():
            images = request.FILES.getlist('prop_photo')
            for img in images:
                photo = PropPhoto.objects.create(prop_photo=img,)
            return HttpResponseRedirect('thanks/')
    else:
        image_form = ImageUploadsForm()

    return render(request, 'personal_property_site/photo_upload.html', {
        'image_form': image_form,
    })

forms.py

address_list = []
for prop in Property.objects.all():
    address_list.insert(1, (prop.slug, prop.slug))
address_list.reverse()

class ImageUploadsForm(forms.Form):
    property_name = forms.CharField(label='Property Name',
                                    required=True,
                                    max_length=250,
                                    widget=forms.Select(
                                        attrs={
                                            'class': 'form-control',
                                        },
                                        choices=address_list, #this is what to change
                                    ))

    prop_photo = forms.FileField(label='Upload property photos',
                                 required=True,
                                 widget=forms.ClearableFileInput(
                                     attrs={
                                         'class': 'form-control',
                                         'multiple': True,
                                     },
                                 ))

В этой строке нужно присвоить свойство

photo = PropPhoto.objects.create(prop_photo=img,)

Сначала получите свойство, которое вы хотите присвоить фотографии property = Property.objects.get(-вставьте здесь что угодно для идентификации свойства-)

Тогда:

photo = PropPhoto.objects.create(prop_photo=img,property_name = property)

Вернуться на верх