在Django中,你如何将ForeignKey传递给Model的一个实例? [英] In Django, how do you pass a ForeignKey into an instance of a Model?

查看:127
本文介绍了在Django中,你如何将ForeignKey传递给Model的一个实例?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在写一个存储作业的应用程序。它们被定义为具有与用户链接的ForeignKey。我不明白在创建它时如何将ForeignKey传递给模型。我的工作模式没有外键,工作正常,但现在我试图添加用户到系统,我无法得到表单验证。



models.py :django.db导入模型




从django导入表单
从django.contrib.auth导入
。模型导入用户

类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 = model.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)

类JobForm(forms.ModelForm):
class Meta:
model = Job

在views.py中,我创建的对象如下:

  if request.method =='POST':
form = JobForm(request.POST,request.FILES)
如果form.is_valid():
#Do这里的东西

我知道这会将表单数据和上传的文件传递给表单。但是,我不明白如何传入一个用户被设置为ForeignKey。



提前感谢任何可以帮助的人。

解决方案

Django中的一个典型模式是:


  1. 用户字段从模型窗体

  2. 将表单保存为 commit = False

  3. 设置 job.user

  4. 保存到数据库

在您的情况下:

 类JobForm(forms.ModelForm) :
class Meta:
model = Job
exclude =('user',)

如果request.method =='POST':
form = JobForm(request.POST,request.FILES)
job = form.save(commit = False)
job.user = request.user
job.save()
#这里不需要下一行,因为我们没有任何m2m字段
form.save_m2m()

请参阅模型表单 save()方法获取更多信息。


I am writing an application which stores "Jobs". They are defined as having a ForeignKey linked to a "User". I don't understand how to pass the ForeignKey into the model when creating it. My Model for Job worked fine without a ForeignKey, but now that I am trying to add users to the system I can't get the form to validate.

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

In views.py I was creating the objects as follows:

if request.method == 'POST':
    form = JobForm(request.POST, request.FILES)
    if form.is_valid():
        #Do something here

I understand that this passes the form data and the uploaded files to the form. However, I don't understand how to pass in a User to be set as the ForeignKey.

Thanks in advance to anyone who can help.

解决方案

A typical pattern in Django is:

  1. exclude the user field from the model form
  2. save the form with commit=False
  3. set job.user
  4. save to database

In your case:

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()

See the Django docs on the model form save() method for more information.

这篇关于在Django中,你如何将ForeignKey传递给Model的一个实例?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆