【问题标题】:Setting a parents value in a childs object's model form in Django?在 Django 的子对象模型表单中设置父值?
【发布时间】:2017-06-21 20:16:33
【问题描述】:

我希望将父母的变量之一预先填充到孩子的模型形式中,特别是序列号。我已经设法将序列号作为 URL 的一部分,但想弄清楚如何将它实现为表单页面上的变量。

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__'

templates/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'),]

templates/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. 如何设置表单默认值?

【问题讨论】:

    标签: django python-3.x django-forms


    【解决方案1】:

    对于标题:

    <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
    

    【讨论】:

      猜你喜欢
      • 2020-11-16
      • 2015-10-06
      • 1970-01-01
      • 2012-05-14
      • 1970-01-01
      • 1970-01-01
      • 2011-04-30
      • 1970-01-01
      • 2018-12-09
      相关资源
      最近更新 更多