在modelform中初始化foreignkey

时间:2014-08-21 10:49:50

标签: django django-forms

我正在尝试在ModelForm中初始化ForeignKey。这应该是Django 101,但我显然没有谷歌搜索和阅读文档。这就是我试过的:

# models.py

class Sale(models.Model):
    pass

class Settlement(models.Model):
    sale = models.ForeignKey(Sale)

# forms.py

class SettlementForm(ModelForm):        
    class Meta:
        model = Settlement

# views.py

def add_settlement(request, sale_id):
    sale = get_object_or_404(Sale, id=sale_id)

    form = SettlementForm(initial={'Sale': sale})

    form.fields['sale'].initial = str(sale)

    return render(request, 'settlement.html', {'settlementform': form, 'sale': sale})

是的,这是我试图初始化ForeignKey的两种不同(和错误)方式,但失败了。那么,你如何以正确的方式做到这一点?

(是的,我搜索了StackOverflow,但正如我所说,我显然在谷歌搜索失败:-()

1 个答案:

答案 0 :(得分:2)

要记住的是外键字段的值是它的ID。这两种方法都可以使用,但每种方法都有(不同的)问题。

对于第一种方法,您应该使用正确的字段名称:

form = SettlementForm(initial={'sale': sale.id})

对于第二个,您必须传递ID,而不是字符串表示:

form.fields['sale'].initial = sale.id

第一种方法更可取。