2017-06-21 50 views
0

我希望父母的變量之一可以在孩子的模型表格中預先填充,具體爲序列號。我設法將序列號作爲URL的一部分,但想弄清楚它如何在表單頁面上作爲變量實現。在Django的childs對象模型表單中設置父項值?

Models.py

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

class ProductInstance(models.Model): 
    serial_number = models.ForeignKey('Product', on_delete=models.SET_NULL, null=True) 

Views.py

class ProductInstanceCreate(CreateView): 
    model = ProductInstance 
    template_name = 'myapp/edit_productinstance.html' 
    form_class = GunInstanceForm 

def get_success_url(self): 
    return reverse_lazy ('product-detail', kwargs={'pk': self.object.serial_number.pk}) 

Forms.py

class ProductInstanceForm(forms.ModelForm): 

class Meta: 
    model = ProductInstance 
    fields = '__all__' 

個模板/ MYAPP/product_detail.html

... 
<a href="{% url 'productinstance_create' serial_number=product.serial_number %}">New</a> 
... 

urls.py

urlpatterns += [ 
url(r'^productinstance/(?P<serial_number>[-\w]+)/create/$', views.ProductInstanceCreate.as_view(), name='productinstance_create'),] 

模板/ MYAPP/edit_productinstance_form.html

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


<h2>Serial Number: {{ serial_number }}</h2> 
</br> 
<form action="" method="post"> 

    {% csrf_token %} 
    <table> 
    {{ form }} 
    </table> 
    <input type="submit" value="Submit" /> 
</form> 
</br> 
<a href="">Back</a> 

{% endblock %} 

所以目前我可以創造一個URL例如:productinstance/D1430913/create/

我現在需要知道:

  1. 如何使用它作爲標題的變量?

  2. 如何設置窗體的默認值呢?

回答

0

對於標題:

<h2>Serial Number: {{ form.serial_number.value }}</h2> 

如果您修改CreateView的,像這樣和落實serial_number_func(),不管你需要得到的序列號,我相信,這會做你想要什麼:

class ProductInstanceCreate(CreateView): 
    model = ProductInstance 
    template_name = 'myapp/edit_productinstance.html' 
    form_class = GunInstanceForm 

    def get_form_kwargs(self): 
     kwargs = super(ProductInstanceCreate, self).get_form_kwargs() 
     kwargs['serial_number'] = serial_number_func() 
     return kwargs 
相關問題