【问题标题】:getting an error not related to form validation收到与表单验证无关的错误
【发布时间】:2017-01-28 05:44:47
【问题描述】:

我正在尝试将上一个网站的 id (brand_id) 注入表单中,因为我尝试在 DB 上创建的对象取决于该外键关系。这是代码

from brand.models import Brand
from .models import Campaign
from .forms import CampaignForm
# Create your views here.

def campaign_create(request):
   previous_website = request.META['HTTP_REFERER']
   brand_id = int(previous_website.rsplit('/', 1)[-1])
   print(brand_id)
   brand_object = Brand.objects.get(id=brand_id)

   # if not request.user.is_staff or not request.user.is_superuser:
   #     raise Http404

   title = "Create Campaign"
   form = CampaignForm(request.POST or None)

    # check whether it's valid:

   if form.is_valid(): #Checking that form is valid
        instance = form.save(commit=False) # saving the form as an instance object
        instance.user = request.user
        instance.brand = brand_object #adding the brand object
        instance.save() # saving in the database

        # redirect to a new URL:

        return HttpResponseRedirect(instance.get_absolute_url())
     context = {
    "form": form,
    "title": title,
    }

   return render(request, "campaign_form.html", context)

在代码之外(在 shell 中),这完美无缺,问题是当我尝试提交代码时,虽然我得到了正确的 ID 号(在日志中打印正确的值)并且我得到了正确的 brand_object,我是得到一个 ValueError

ValueError 位于 /dashboard/campaign/create/ 基数为 10 的 int() 的无效文字:''

因为在提交表单之前元值更改为当前网站(新的 previous_website 现在是当前网站)。我怎样才能做到这一点,以便我可以在 META 值更改之前获得它,或者我可以使用哪些其他方法来获取该对象创建所依赖的品牌对象,而无需动态更改它?

我的流程是:

  • 创建品牌 --> localhost:/dashboard/brand/create
  • 创建品牌后重定向到该品牌 --> localhost:/dashboard/brand/detail/(brand_id)
  • 创建活动(与品牌相关)localhost:/dashboard/campaign/create

品牌和营销活动是作为外键连接的应用(一个品牌可以有多个营销活动,但一个营销活动不能有多个品牌)

【问题讨论】:

    标签: django django-models django-forms


    【解决方案1】:

    您可以将brand_id 放在campaign_create 的网址上

    url(r'^dashboard/campaign/create/(?P<brand_id>[0-9]+)/', views.campaign_create),
    

    在视图中使用get_object_or_404函数:

    def campaign_create(request, brand_id):
        brand_object = get_object_or_404(Brand, pk=brand_id)
        # ...
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-01-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-17
      • 1970-01-01
      相关资源
      最近更新 更多