Django 根据变量使用不同的形式
我有一个“产品”字段,我想用它来确定要显示的表单。我试图在视图中执行此操作,但不知道是否应该在模板中执行此操作。我尝试了以下方法,但是if语句没有指定“form”。我做错了什么Django 根据变量使用不同的形式,django,Django,我有一个“产品”字段,我想用它来确定要显示的表单。我试图在视图中执行此操作,但不知道是否应该在模板中执行此操作。我尝试了以下方法,但是if语句没有指定“form”。我做错了什么 @login_required def update_message(request, pk): message = get_object_or_404(Submission, pk=pk) author = message.author date_posted = message.date_po
@login_required
def update_message(request, pk):
message = get_object_or_404(Submission, pk=pk)
author = message.author
date_posted = message.date_posted
product = message.product
message_obj = Submission.objects.get(pk=pk)
program_type = message.program_type
if author == request.user:
if request.method == 'POST':
if product == 'Apple':
form = AppleForm(request.user, request.POST, instance=message)
if product == 'Orange':
form = OrangeForm(request.user, request.POST, instance=message)
if form.is_valid():
message_sub = form.save(commit=False)
message_sub.author = request.user
message_sub.date_posted = timezone.now()
message_sub.save()
form.save_m2m()
messages.success(request, 'Message updated')
return redirect('submission-list')
else:
if product == 'Apple':
form = AppleForm(request.user, instance=message)
if product == 'Orange':
form = OrangeForm(request.user, instance=message)
else:
messages.warning(request, 'You can't do that.')
return redirect('message-submission-list')
return render(request, 'programs/submission_create_form.html', {'product':product,'form': form, 'message_obj': message_obj,'program_type':program_type})
类消息提交(models.Model):
在视图中这样做没有错。如果在那些
If
语句之后没有定义表单,则表示产品的值不是Apple
或Orange
,而是其他值。我会再次检查product
的值以解决问题
因为Product
是一个类,所以应该引用一个字段。你没有发布它的代码,但是举个例子
if form == product.name
如果有名称
字段。在视图中这样做没有什么错。如果在那些If
语句之后没有定义表单,则表示产品的值不是Apple
或Orange
,而是其他值。我会再次检查product
的值以解决问题
因为Product
是一个类,所以应该引用一个字段。你没有发布它的代码,但是举个例子
if form == product.name
如果有一个名称
字段。正如我在评论中提到的,问题是产品
是另一个型号的外键。在模板中,FK将使用该模型的\uuu str\uuu
方法显示,但这并不使其等于该显示值。您应该明确地与目标模型上的相关字段进行比较:
if product.fruit_type == 'Orange' # or whatever the field is
(或者,如果str(product)=‘Orange’
则可以执行,但这更为脆弱,并且以一种不太好的方式耦合显示逻辑。)正如我在评论中提到的,问题是产品
是另一个模型的外键。在模板中,FK将使用该模型的\uuu str\uuu
方法显示,但这并不使其等于该显示值。您应该明确地与目标模型上的相关字段进行比较:
if product.fruit_type == 'Orange' # or whatever the field is
(或者,如果str(product)=‘Orange’
则可以执行操作,但这更为脆弱,并且以一种不太好的方式耦合显示逻辑。)如果未分配表单变量,则if
语句都不正确。什么是消息.产品
?显示提交模型定义。我将“产品”作为测试传递给模板,它可以通过Apple或Orange测试并显示出来。这就是为什么我不明白为什么ifs不起作用。好吧,那是什么领域?例如,如果它是另一个型号的外键,它可能打印为“Apple”,但不直接等于“Apple”。显示定义。是的,我想你可能知道一些事情,这是一个FK。我刚刚用model更新了帖子如果表单变量没有赋值,那么你的if
语句都不是真的。什么是消息.产品
?显示提交模型定义。我将“产品”作为测试传递给模板,它可以通过Apple或Orange测试并显示出来。这就是为什么我不明白为什么ifs不起作用。好吧,那是什么领域?例如,如果它是另一个型号的外键,它可能打印为“Apple”,但不直接等于“Apple”。显示定义。是的,我想你可能知道一些事情,这是一个FK。我刚刚用modelAwesome更新了帖子,我现在看到了。我将其设置为message.product.name=='Orange',它工作正常。我也试过str,也很管用,但我肯定会用第一种方法。谢谢太棒了,我现在明白了。我将其设置为message.product.name=='Orange',它工作正常。我也试过str,也很管用,但我肯定会用第一种方法。谢谢