首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在Django中传递和接收object pk来修复CreateView中的外键字段

,可以通过以下步骤来实现:

  1. 首先,确保你的模型中有一个外键字段,用于关联到其他模型。例如,假设我们有一个名为Order的模型,其中包含一个外键字段customer,关联到Customer模型。
  2. 在创建CreateView视图类时,可以通过重写get_context_data()方法来传递object pk到模板中。在get_context_data()方法中,我们可以获取到object pk的值,并将其传递给模板。代码示例如下:
代码语言:txt
复制
from django.views.generic import CreateView
from .models import Order

class OrderCreateView(CreateView):
    model = Order
    fields = ['customer']

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context['customer_pk'] = self.kwargs.get('pk') # 获取object pk的值
        return context
  1. 接下来,在模板中,我们可以通过在URL模式中指定object pk来传递值给视图,并在表单中使用该值。代码示例如下:
代码语言:txt
复制
<!-- urls.py -->
from django.urls import path
from .views import OrderCreateView

app_name = 'orders'
urlpatterns = [
    path('create/<int:pk>/', OrderCreateView.as_view(), name='order_create'),
]

<!-- order_form.html -->
<form method="post">
  {% csrf_token %}
  {{ form.as_p }}
  <input type="hidden" name="customer" value="{{ customer_pk }}">
  <button type="submit">Submit</button>
</form>

在上述示例中,我们通过URL的<int:pk>部分来传递object pk的值,并在模板中使用customer_pk来表示该值。

通过以上步骤,我们可以在Django中传递和接收object pk来修复CreateView中的外键字段。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Django学习-第七讲:django 中的常用字段、字段属性,外键和表关系、外键操作

外键和表关系 在MySQL中,表有两种引擎,一种是InnoDB,另外一种是myisam。如果使用的是InnoDB引擎,是支持外键约束的。外键的存在使得ORM框架在处理表关系的时候异常的强大。...因此这里我们首先来介绍下外键在Django中的使用。 类定义为class ForeignKey(to,on_delete,**options)。...因此在底层,Django为Article表添加了一个属性名_id的字段(比如author的字段名称是author_id),这个字段是一个外键,记录着对应的作者的主键。...在论坛开发中,一般评论都可以进行二级评论,即可以针对另外一个评论进行评论,那么在定义模型的时候就需要使用外键来引用自身 class Comment(models.Model): content...如果设置这个选项,前提是要指定这个字段一个默认值。 5.SET():如果外键的那条数据被删除了。那么将会获取SET函数中的值来作为这个外键的值。

4K30
  • django中ModelForm多表单组合的解决方案

    中告诉django需要在表单中创建哪些字段。...3、通用视图 django.views.generic.ListView和django.views.generic.edit下的CreateView, UpdateView, DeleteView都是通用视图...可以看到,除去定义model或者form类外,几行代码就可以搞定这么多事。我们看看CreateView的继承关系: 简单介绍下CreateView通用视图中每个父类的作用。...,此时是不能save的,因为外键project和address对应的数据库记录还没有创建,所以commit传为False           contract = form.save(commit=False...#按照四条数据库记录的顺序依次的创建(调用save方法)、主键赋到下一条记录的外键中、下一次记录创建(save)           projectAddress = context['projectAddressForm

    3.4K20

    Django源码学习-8-ListView&DetailView通用视图

    Django网络应用开发的5项基础核心技术包括模型(Model)的设计,URL 的设计与配置,View(视图)的编写,Template(模板)的设计和Form(表单)的使用。...Django的通用视图可以减少开发的单调性,它抽象出一些在视图开发中常用的代码和模式,这样就可以在无需编写大量代码的情况下,快速编写出常用的视图函数。 ?...): # 指明要操作的Model(展示 Publisher 的所有对象) model = Publisher # 在模板 context 中 model 的变量名,默认是 object_list...② DetailView:显示一个对象的某个属性详细信息 用于显示某一 Model 中的一个 object 的详细信息。...用属性 model 或 queryset 指定要操作的 Model 或 queryset; DetailView 会根据 URLConf 中的 pk> 或 筛选出一个

    1.4K10

    Python-Django

    假设用户要访问某篇文章,它会自动解析 blog:detail 这个视图函数对应的 url,并且把 article.pk(文章的主键)传递给detail视图函数,details就是我们在blog/urls.py...url return reverse('blog:detail', kwargs={'article_id': self.pk}) Django给我们提供了很多有用的字段,比如上面提到的...Django中的一对多是在一中进行设置,这里对应于文章的分类,ForeignKey即数据库中的外键。...,直接制定model就行了,get_context_data可以添加一些额外的字段,比如以后我们要在首页的侧边栏显示目录和标签,所以这里要添加一个category_list和tag_list。...= "article" # pk_url_kwarg会自动和model中相应的主键对应,aritlce_id就是下面配置的URLCONF pk_url_kwarg = 'article_id

    73420

    基于python+django的二手商品交易平台-二手商品供需系统

    项目简介该项目是基于python的web类库django开发的一套web网站,二手商品交易平台,给师弟开发的课程作业。大家在学习过程中,遇到问题可以github咨询作者。...return Product.objects.filter(status=0).order_by('-timestamp')详情页我们再来开发详情页,从urls.py中看到,详情页是由DetailView来实现的...,我们来窥探它的全貌:class DetailView(generic.DetailView): model = Product template_name = 'app/detail.html...提交页最后再来看一下提交页,它是由CommitView来实现的。...") return reverse('app:commit')它是继承自CreateView,因为是创建操作嘛,在post中,我们通过ratelimit来限制提交次数,防止恶意提交。

    54800

    Django ORM 多表操作

    (ManyToManyField):在第三张关系表中新增数据 ORM 修改数据 ORM 删除和清空数据 跨表查询 基于对象的跨表查询 基于双下划线的跨表查询 聚合查询 示例 F查询 Q查询 Django...ORM 多表操作 表模型 图书表 出版社表 作者表 作者详情表 表关系 一对一:一对一推荐建在查询频率高的一方 一对多:外键字段建在多的一方 多对多:外键字段建在查询频率多的一方,在Django第三张表不需要创建...,自动创建 ps:外键字段不需要写表名_id后面的_id,ORM创建的时候自动添加了_id,以及外键以虚拟字段的形式存在 创建模型 '''models.py''' from django.db import...3、一般不需要设置联级更新. 4、外键在一对多的多中设置:models.ForeignKey("关联类名", on_delete=models.CASCADE)。...) 一对多中,设置外键属性的类(多的表)中,MySQL 中显示的字段名是:外键属性名_id。

    1.8K20

    基于django的视频点播网站开发-step6-个人中心功能

    需要我们做的就是在users/urls.py中添加个人资料的路由, path('profile/pk>/', views.ProfileView.as_view(), name='profile...': self.request.user.pk}) 简单的几行代码,就实现了个人资料的更新,再次彰显了django框架的强大。...我们这里继承了UpdateView来实现更新操作,和DetailView类似,我们这里也设置了model和template_name 还有form_class。...当更新成功后,django会回调get_success_url来将结果告诉模板,因此我们可以在get_success_url里面做一些定制的工作,我们可以传一些自己的参数。...'), 我们设置的订阅视图类为SubscribeView,因为订阅的功能和修改个人资料功能类似,也是属于更新操作,所以同样是使用UpdateView来更新。

    1.2K00

    基于django的视频点播网站开发-step5-详情页功能

    在success回调中,通过判断user_liked的值来确定自己是否喜欢过,然后改变模板中相应的css。 推荐功能 每个网站都有自己的推荐功能,且都有自己的推荐逻辑。...实现起来非常容易,我们知道详情页实现用的是VideoDetailView,我们可以在get_context_data()中把推荐内容传递给前端模板。...数据类型是ForeignKey,外键是settings.AUTH_USER_MODEL,并设置为级联删除on_delete=models.CASCADE nickname 用户昵称。...在接收函数中,通过form自带的验证函数来保存记录,然后将这条记录返回到前端模板。 下面我们开始评论列表的开发。...当获取到page和page_size后,使用paginator对象来实现分页。最后通过render_to_string将html传递给模板。

    2.2K30

    Django REST 框架详解 04 | 序列化与反序列化及二者整合

    1.视图 2.路由 3.接口测试 一、序列化 1.步骤 model s.py,定义表与字段,及表关系 serializes.py 中序列化与反序列化 views.py 中写 get,post 等操作...import models # 基表 # 提供公用的字段,而不创建表 from django.contrib.auth.models import User class BaseModel(models.Model...publish 的外键,提数据 publish = PublishModelSerializer() class Meta: # 序列化类关联的 model 类...def validate(self, attrs): # 同一出版社不能出版同一本书 publish = attrs.get('publish') # 这里的外键已经变成对象...三、序列化与反序列的整合 从数据的安全性和健壮性来考虑,所有的自定义字段不能与 model 的原字段相同 因为序列化是将外键字段作为 Dict,而反序列化会将外键字段作为 Object 1.视图 views.py

    1.2K10

    Django操作数据库

    本篇主要介绍我们在使用django框架开发的时候使用的操作数据库的语句,这在动态网站部分是很重要的,因为我们需要连接数据库进行操作,然后把数据处理的结果显示在前端页面上,在其他地方我们都是直接用sql语句来手动输入...,这样容易造成错误,还影响效率,在django中,内置了很多处理数据库操作的函数,能更便利的帮我们操作数据库 开始 实例代码 models.py class Blog(models.Model):...tagline='All the latest Beatles news.') b.save() 更新数据库 用save()方法实现,如下所示: b5.name = 'New name b5.save() 保存外键和多对多关系的字段...更新外键字段和普通的字段一样,只要指定一个对象的正确类型。...表中的headline字段中包含Lennon的blog数据 Blog.objects.filter(entry__headline__contains='Lennon') 查找blog表中外键关系entry

    38820
    领券