作为初始值的外键未传递给 django 中的 ModelForm
foreign key as initial value not passed to the ModelForm in django
我需要将 ForeignKey 的值(基于 category_id)传递给 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>
尝试更换
form = TransactionForm(request.POST or None, initial={'category':category.name,})
和
form = TransactionForm(request.POST or None, initial={'category':category,})
initial
需要实例 (category
),而不仅仅是包含其名称的字符串 (category.name
)。
我需要将 ForeignKey 的值(基于 category_id)传递给 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>
尝试更换
form = TransactionForm(request.POST or None, initial={'category':category.name,})
和
form = TransactionForm(request.POST or None, initial={'category':category,})
initial
需要实例 (category
),而不仅仅是包含其名称的字符串 (category.name
)。