python - 如何自动将ForeignKey分配给CBV Create View?

标签 python django django-models django-forms django-views

我有两个模型 ProductionProcessProductsMaster 当我使用 {{ object.ProductName }} 时,它附带所有 ForeignKey 数据。但我只想选择一个 pk 带有 url

Models.py ProductionProcess中有ProductsMaster forwignKey

models.py


class ProductsMaster(models.Model):

    Name                    = models.CharField(max_length=40)
    SalesPrice              = models.FloatField()
    FabricCode              = models.CharField(max_length=30)
    SizeType                = models.CharField(max_length=30)
    RequiredFabric          = models.CharField(max_length=30)

def __str__(self):
    return self.Name
class Meta:
    verbose_name_plural = "ProductsMaster"



class ProductionProcess(models.Model):

    ProductName          = models.ForeignKey(ProductsMaster,on_delete=models.CASCADE)
    Name                 = models.CharField(max_length=30)
    PerformAtProduction  = models.BooleanField()

    def __str__(self):
        return self.Name

    class Meta:
        verbose_name_plural = "ProductionProcess"

在 Viwes 中重写 get 方法来获取 pk View .py

class ProductionProcessCreateView(CreateView):
    model = ProductionProcess
    form_class = ProductionProcessForm
    ExampleFormSet = formset_factory(ProductionProcessForm,)
    template_name="master/productionprocess_form.html"


    def get_success_url(self):
    return reverse_lazy('tailoring-products')


def get(self, request, *args, **kwargs):
  product = get_object_or_404(ProductsMaster, pk=self.kwargs['pk'])

  print(self.kwargs['pk'])
  context={'ProductionProcessForm':self.ExampleFormSet(),'id':product}
  return render(request,self.template_name,context)



def post(self,request,*args,**kwargs):
    ExampleFormSet = self.ExampleFormSet(self.request.POST)
    product = get_object_or_404(ProductsMaster, pk=self.kwargs['pk'],)
    # product_id = self.kwargs['pk']
    # print(product_id)

    if ExampleFormSet.is_valid():
        for docs in ExampleFormSet:
          # docs.Name = docs.cleaned_data['Name']
          # docs.ProductName = docs.cleaned_data['ProductName']
          # docs.PerformAtProduction = docs.cleaned_data['PerformAtProduction']
          docs.save(commit=False)
          docs.instance.ProductName_id = self.kwargs.get('pk')
          # print(docs.instance.ProductName_id)
          docs.save()


        return HttpResponseRedirect(self.get_success_url())

    else:
          context={
                  'ExampleFormSet':self.ExampleFormSet(),
                  # 'form':form
                  }

    return render(request,self.template_name,context)

HTML

                           <th class="column-title">ProductName </th>
                        <th class="column-title">PROCESS NAME</th>

                        <th class="column-title">PERFORM AT PRODUCTION</th>
                        <th class="column-title">Action </th>



                      </tr>
                    </thead>

                    <tbody >
                    {% for object in ProductionProcessForm %}

                    {{ ProductionProcessForm.management_form }}

                      <tr id="formset"  class="even pointer">
                        <td class=" ">{{ object.ProductName }} </td>
                        <td class=" ">{{ object.Name }}</td>

                        <td class=" ">{{ object.PerformAtProduction }}</td>
                        <td class=""></td>


                      </tr>

                      {% endfor %}
                    </tbody>
                  </table>
                      <button id="send" type="submit" class="btn btn-success">Submit</button>

                </div>

最佳答案

                docs.save(commit=False)
                docs.instance.ProductName_id = self.kwargs.get('pk')
                docs.instance.user = self.request.user
                docs.save()

关于python - 如何自动将ForeignKey分配给CBV Create View?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53718872/

相关文章:

python - 将 pandas float 系列转换为 int

python - 将查询字符串传递给 ModelForm 隐藏字段 - Django

python - Django:如何避免重复的 html id 以相同的形式显示两次字段?

忽略 Python 类型提示

python - 在 python ggplot 中访问轴或图形

python - 以特定的 json 格式发送报告

django - 为什么 Django ORM 在简单的外键关系上失败?

python - Django celery : Celery task does not create record in DB

python - 在 virtualenv 中安装 PyQt4

python - Django 和 docker 中 .env 文件中的环境变量