Как предварительно заполнить поле формы значением поля foreignkey модели при загрузке формы в Django

У меня есть следующие модели:

class Member(models.Model):
    member_id = models.AutoField(primary_key=True)
    name = models.CharField(max_length=100)

class Photo(models.Model):
    photo_id = models.AutoField(primary_key=True)
    member_photo = models.ImageField(upload_to='member/', null=True, blank=True)
    member = models.ForeignKey(Member, on_delete=models.CASCADE)

Я создал модель формы, общие представления для создания и обновления класса Member.

Отсюда я хочу иметь возможность загружать фотографии членов клуба во вторую модель 'Photo' непосредственно из ListView для «Member», добавив ссылку на CreateView для загрузки фотографии.

Формы ModelForm и CreateView для добавления фотографий следующие:

ModelForm

class MemberPhotoAddForm(forms.ModelForm):
    class Meta:
        model = Photo
        fields = ('member', 'member_photo')
        widgets = {
            'member': forms.TextInput(attrs={'placeholder': 'Type name...', }),
            'member_photo': forms.FileInput(attrs={'onchange': 'readURL(this)'}),
            }

CreateView

class PhotoUpload(CreateView):
    template_name = "member_photo_add.html"
    model = Photo
    form_class = MemberPhotoAddForm

    success_url = reverse_lazy('member_list') # URL for the ListView for Member class

    # I am trying to use method 'get_inital()' to pass 'member_id' to the form to add a 'Photo'
    def get_initial(self):
        member = self.request.GET.get('Member')
        return {
            'member': member,
            }

В файле urls.py у меня есть:

    ...
    path('member_acct/photos/add/<int:pk>', views.PhotoUpload.as_view(), name='member_photo_add'),
    ...

В моем шаблоне я перебираю поля, чтобы отобразить их (и их значения).

Однако, как я и предполагал, я не могу заполнить значение первичного ключа участника при загрузке формы (для добавления фотографии) - поле остается пустым.

(В одном из постов на SO я прочитал, как некий плакат рассказывал о том, что

вручную пройдитесь по всем полям, в которых, возможно, не отображается начальное значение

.

Но и обращение к простому form.as_p тоже не помогло.

Является ли то, что я пытаюсь сделать, правильным путем? Буду очень признателен за советы.

Решили ее, изменив CreateView таким образом:

def get_initial(self):
    member = self.kwargs['pk']    # << Here
    return {
        'member': member,
        }

С помощью мистера Розмана

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