外键作为初始值未传递到 django 中的 ModelForm

Kar*_*bas 5 python django-forms django-1.9

我需要将ForeignKey 的值(基于category_id)传递给ModelForm,但它不起作用。我的字段仍然是“--------”,并且没有从下拉字段中设置正确的值。必须选择类别的值,并且不得向用户隐藏其他值以供选择。

由于结果类别值已成功传递到模板,但下拉字段类别未设置!

正如我所看到的,其他人通过 ModelForm 的构造函数解决了这个问题,但我觉得必须有原生的 django 解决方案。

如有任何解决方案,将不胜感激!

我的模型.py:

class Category(models.Model):
    name = models.CharField('Name', max_length=20)
    icon = models.CharField('Icon', blank=True, max_length=20)

class Transaction(models.Model):
    type = models.CharField('Type', default='exp', max_length=20)
    category = models.ForeignKey(Category, on_delete=models.DO_NOTHING)
    note = models.CharField('Note', blank=True, max_length=20)
Run Code Online (Sandbox Code Playgroud)

我的网址.py:

urlpatterns = [
url(r'^add/(?P<category_id>[0-9]+)', "core.views.add_trans_view", name='add_trans_url'),
]
Run Code Online (Sandbox Code Playgroud)

我的观点.py:

def add_trans_view(request, category_id):
    category = Category.objects.get(id=category_id)
    form = TransactionForm(request.POST or None, initial={'category':category.name,})
    if form.is_valid():
        instance = form.save(commit=False)
        instance.save()
        return render(request,
            'core/transaction_form.html', {'form': form, 'for_debug':category})
Run Code Online (Sandbox Code Playgroud)

我的表单.py:

class TransactionForm(forms.ModelForm):
class Meta:
    model = Transaction
    fields = ['type', 'category', 'note']
Run Code Online (Sandbox Code Playgroud)

我的模板:

<p>Initial 'category' value transfered from view:</p>
<h4>{{for_debug}}</h4>
<form method='POST' action=''> {% csrf_token %}
  {{form.as_p}}
  <input type='submit' value='Done'/>    
</form>
Run Code Online (Sandbox Code Playgroud)

Los*_*ses 5

尝试更换

form = TransactionForm(request.POST or None, initial={'category':category.name,})
Run Code Online (Sandbox Code Playgroud)

form = TransactionForm(request.POST or None, initial={'category':category,})
Run Code Online (Sandbox Code Playgroud)

initial需要实例 ( category),而不仅仅是包含其名称 ( category.name) 的字符串。