python - 如何通过父 ID 向子表单添加值?
问题描述
这是我的模型
class User(models.Model):
name = models.CharField(max_length=50)
surname = models.CharField(max_length=50)
class Phone(models.Model):
user = models.ForeignKey(Osoba, editable=False, related_name='phone', on_delete=models.CASCADE)
phone = models.CharField(max_length=50)
我想将电话添加到由 ID 选择的当前用户并在现场显示
我试过了
def create_phone(request, id):
user = User.objects.get(id=id)
form = PhoneForm(request.POST or None, instance=user)
if form.is_valid():
form.save()
return redirect('list_users')
return render(request, 'index-phone.html', {'form': form})
但它不起作用,当我单击按钮时,它不会创建新电话
我的网址
urlpatterns = [
path('', list_users, name='list_users'),
path('new', create_user, name='create_user'),
path('/<int:id>/update', update_user, name='update_user'),
path('/<int:id>/delete', delete_user, name='delete_user'),
path('/<int:id>/', create_phone, name='create_phone')
]
解决方案
我不确定您的 PhoneForm 类的内容,但我猜这是创建和编辑 Phone 对象的表单。实例化新的 PhoneForm 时,实例参数应该是现有的 Phone 实例,或者是 None。
您应该以另一种方式设置 Phone 实例的用户,或者通过将其设置为 PhoneForm 上的字段,或者通过手动设置用户。
这是正确的:
def create_phone(request, id):
user = User.objects.get(id=id)
form = PhoneForm(request.POST or None)
if form.is_valid():
# Setting commit to False does not save the object to the database yet.
# We do this because we still want to edit the object.
phone = form.save(commit=False)
phone.user = user
phone.save()
return redirect('list_users')
return render(request, 'index-phone.html', {'form': form})
推荐阅读
- comments - 修改 Blogger 动态视图模板中的“评论为”选项
- python-3.x - UnicodeDecodeError/无效的继续字节
- c# - 如何在c#中将字符串变量绑定到锚标记的href
- android - 如何在android studio中实现半窗
- python - 连续追加到列表时的Python内存管理
- microsoft-teams - 无法在 Teams 中保存自定义应用程序的选项卡
- c++ - 如果整个应用程序都是虚拟映射的,为什么 new 会进行系统调用?
- git - 如何将分支中旧提交中文件中的更改部分还原到该分支的 HEAD?
- php - 当定义的产品是 WooCommerce 购物车时添加折扣
- node.js - 无法在 Windows10 中安装 NodeGui 和 React-NodeGUI