2016-02-05 46 views
1

我需要将ForeignKey的值(基于category_id)传递给ModelForm,但它不起作用。我的字段保持“--------”,并且下拉字段中没有设置适当的值。 类别的值必须被选择,其他值不能从用户选择。作为初始值的外键没有传递给django中的ModelForm

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

正如我所看到的其他人通过ModelForm的构造函数解决它,但我觉得必须有本地django解决方案。

感谢任何解决方案!

我的models.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) 

我urls.py:

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

我views.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}) 

我forms.py:

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

我的模板:

<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> 
+0

但是你的'Category'模型里面有数据吗? –

+1

为什么你在'form = TransactionForm(request.POST或None,initial = {'category':category.name,})''传递类别的名字?你尝试过'{'category':category}'吗? – LostMyGlasses

+0

@上海,当然,有记录。 for_debug变量成功传递给模板 –

回答

1

尝试

form = TransactionForm(request.POST or None, initial={'category':category,}) 

initial更换

form = TransactionForm(request.POST or None, initial={'category':category.name,}) 

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

相关问题