Установите начальные значения в форме, передавая параметры (kwargs) с помощью представления

Я хочу заполнить форму значениями, взятыми из таблицы. Сначала я передаю PK относительно строки, где я хочу получить значения, и строю список kwargs:

views.py

def NavetteToFicheCreateView(request, pk):

    navette = Navette.objects.get(id=pk)
    ref = navette.id
    attribute_set = navette.famille.pk
    cost = navette.cost
    qty = navette.qty
    etat = navette.etat
    etat_ebay = navette.etat.etat_ebay
    ean = get_last_ean()

    form = NavetteToFicheForm(
        request.POST,
        ref=ref,
        attribute_set=attribute_set,
        cost=cost,
        qty=qty,
        etat=etat,
        etat_ebay=etat_ebay,
        ean=ean,
)
[...]

затем я получаю kwargs в form.py и устанавливаю свои начальные значения

class NavetteToFicheForm(forms.ModelForm):

def __init__(self, *args, **kwargs):

    self.ref = kwargs.pop('ref', 'noref')
    self.attribute_set = kwargs.pop('attribute_set', 9999)
    self.cost = kwargs.pop('cost', 0)
    self.qty = kwargs.pop('qty', 0)
    self.etat = kwargs.pop('etat', 0)
    self.etat_ebay = kwargs.pop('etat_ebay', 9999)
    self.ean = kwargs.pop('ean', 9999)

    super(NavetteToFicheForm, self).__init__(*args, **kwargs)

    self.fields['ref'].initial = self.ref
    self.fields['attribute_set'].initial = self.attribute_set
    self.fields['cost'].initial = self.cost
    self.fields['qty'].initial = self.qty
    self.fields['etat'].initial = self.etat
    self.fields['etat_ebay'].initial = self.etat_ebay
    self.fields['ean'].initial = self.ean
[...]

Моя проблема: некоторые поля, такие как "ref" или "attribute_set" являются foreignKeys и не передаются, когда я отображаю форму.

Для проверки моих значений :

print(self.ref)
print(self.attribute_set)

output

34
2
noref
9999

Вопросы :

  1. Why does the "print" displays 2 couples of values ? This looks like as if the "noref" and "999" are taken in account.

  2. Why if i set manually 34 and 2 values, it works ?

    self.fields['ref'].initial = 34 self.fields['attribute_set'].initial = 2

Возможно, есть лучший способ сделать это, но я его пока не знаю .

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