在 Django 中,如何将 ForeignKey 传递给 Model 的实例?
Posted
技术标签:
【中文标题】在 Django 中,如何将 ForeignKey 传递给 Model 的实例?【英文标题】:In Django, how do you pass a ForeignKey into an instance of a Model? 【发布时间】:2012-03-09 01:50:12 【问题描述】:我正在编写一个存储“工作”的应用程序。它们被定义为具有链接到“用户”的 ForeignKey。我不明白在创建模型时如何将 ForeignKey 传递给模型。在没有 ForeignKey 的情况下,我的作业模型运行良好,但现在我正在尝试将用户添加到系统中,我无法让表单进行验证。
models.py:
from django.db import models
from django import forms
from django.contrib.auth.models import User
class Job(models.Model):
user = models.ForeignKey(User)
name = models.CharField(max_length=50, blank=True)
pub_date = models.DateTimeField('date published', auto_now_add=True)
orig_image = models.ImageField('uploaded image', upload_to='origImageDB/', blank=True)
clean_image = models.ImageField('clean image', upload_to='cleanImageDB/', blank=True)
fullsize_image = models.ImageField('fullsize image', upload_to='fullsizeImageDB/')
fullsize_clean_image = models.ImageField('fullsize clean image', upload_to='fullsizeCleanImageDB/')
regions = models.TextField(blank=True)
orig_regions = models.TextField(blank=True)
class JobForm(forms.ModelForm):
class Meta:
model = Job
在views.py中我创建对象如下:
if request.method == 'POST':
form = JobForm(request.POST, request.FILES)
if form.is_valid():
#Do something here
我了解这会将表单数据和上传的文件传递给表单。但是,我不明白如何传入要设置为 ForeignKey 的用户。
提前感谢任何可以提供帮助的人。
【问题讨论】:
【参考方案1】:Django 中的一个典型模式是:
-
从模型表单中排除
user
字段
用commit=False
保存表格
设置job.user
保存到数据库
在你的情况下:
class JobForm(forms.ModelForm):
class Meta:
model = Job
exclude = ('user',)
if request.method == 'POST':
form = JobForm(request.POST, request.FILES)
job = form.save(commit=False)
job.user = request.user
job.save()
# the next line isn't necessary here, because we don't have any m2m fields
form.save_m2m()
有关更多信息,请参阅model form save()
method 上的 Django 文档。
【讨论】:
没有意识到 ModelForm save() 函数返回了在表单的 Meta 类模型属性中指定的模型类的实例。谢谢!【参考方案2】:试试:
if request.method == 'POST':
data = request.POST
data['user'] = request.user
form = JobForm(data, request.FILES)
if form.is_valid():
#Do something here
【讨论】:
这工作正常,除了“request.user”应该是“request.user.id”。谢谢。 @user1216674 实际上在 Django 1.6.1 request.user 工作正常 request.POST 是不可变的以上是关于在 Django 中,如何将 ForeignKey 传递给 Model 的实例?的主要内容,如果未能解决你的问题,请参考以下文章
Django REST 框架——如何将 ForeignKey 解析为实际值,而不是索引?
如何在 Django Admin 中更改 ForeignKey 显示文本?
如何在 django 中获取所有 ForeignKey 的列表