繁体   English   中英

用父ID预填充子模型django create form

[英]Pre-populating a child models django create form with a parent's ID

为了将Parent pk传递到子创建页面,我已遵循此答案中的指南。 目前,虽然它无法正常工作,但我看到以下日志。

[14/Jul/2017 13:15:37] "POST /catalog/productstatus/2/create/ HTTP/1.1" 200 4001

我不确定自己在做什么错,这是我目前拥有的代码。

楷模

Models.py

class Product(models.Model):
    serial_number = models.CharField(unique=True, max_length=15)

class ProductStatus(models.Model):
    serial_number = models.ForeignKey('Product', on_delete=models.CASCADE, null=True)
    status = models.CharField(max_length=20,  blank=True, default='Stock', help_text='Products status')
    date = models.DateTimeField(auto_now_add=True)

视图

class ProductStatusCreate(CreateView):
    model = ProductStatus
    template_name = 'catalog/productstatus_create.html'
    form_class = ProductStatusModelForm

    def form_valid(self, form):
        productstatus = form.save(commit=False)
        product_id = form.data['product_id']
        product = get_object_or_404(Product, id=product_id)
        productstatus.product = product 
        return super(ProductStatusCreate, self).form_valid(form)

    def get_context_data(self, **kwargs):
        context = super(ProductStatusCreate, self).get_context_data(**kwargs)
        context['s_id'] = self.kwargs['product_id']
        return context

    def get_success_url(self):
        if 'product_id' in self.kwargs:
            product = self.kwargs['product_id']
        else:
            product = self.object.product.pk
        return reverse_lazy('product_detail', kwargs={'pk': product})

形式

class ProductStatusModelForm(forms.ModelForm):

    class Meta:
        model = ProductStatus
        fields = ['status',]

    def __init__(self, *args, **kwargs):
        self.fields["product"] = forms.CharField(widget=forms.HiddenInput())
        super(ProductStatusModelForm, self).__init__( *args, **kwargs)

模板/ MYAPP / product_detail.html

<a href="{% url 'productstatus_create' product_id=product.id %}">New</a>

urls.py

urlpatterns += [  
url(r'^productstatus/(?P<product_id>\d+)/create/$', views.ProductStatusCreate.as_view(), name='productstatus_create'),
]

productstatus_create.html

{% extends "base_generic.html" %}
{% block content %}


<h2>New Product Status</h2>
</br>
<form action="" method="post">

  {% csrf_token %}
  <table>
  <input type=hidden id="id_product" name="product" value="{{ s_id }}">
  {{ form }}
  </table>
  <input type="submit" value="Submit" />
</form>
</br>

{% endblock %} 

当查看页面的源代码时,该值确实被填充,但是当我提交表单时,什么也没有发生。

为什么在urls.py中有views.ProductInstanceCreate.as_view(),但是显示的视图称为ProductStatusCreate? 您确定使用的视图正确吗?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM