2012-02-17 28 views
6

Tôi đang viết một ứng dụng lưu trữ "Công việc". Chúng được định nghĩa là có ForeignKey được liên kết với "User". Tôi không hiểu làm thế nào để vượt qua ForeignKey vào mô hình khi tạo ra nó. Mô hình của tôi cho công việc đã làm việc tốt mà không có ForeignKey, nhưng bây giờ tôi đang cố gắng thêm người dùng vào hệ thống, tôi không thể lấy biểu mẫu để xác thực.Trong Django, làm thế nào để bạn vượt qua một ForeignKey vào một thể hiện của một mô hình?

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 

Trong views.py tôi đã tạo ra các đối tượng như sau:

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

Tôi hiểu rằng đây đi các dữ liệu mẫu và các tập tin được tải lên biểu mẫu. Tuy nhiên, tôi không hiểu cách chuyển Người dùng được đặt làm Khóa Ngoại.

Cảm ơn trước với bất kỳ ai có thể trợ giúp.

Trả lời

1

Hãy thử:

if request.method == 'POST': 
    data = request.POST 
    data['user'] = request.user 
    form = JobForm(data, request.FILES) 
    if form.is_valid(): 
     #Do something here 
+0

Điều này hoạt động tốt ngoại trừ 'request.user' phải là 'request.user.id'. Cảm ơn bạn. – user1216674

+0

@ user1216674 Trên thực tế trong Django 1.6.1 request.user hoạt động tốt – AndrewSmiley

+1

request.POST là bất biến – mossplix

7

Một mô hình điển hình trong Django là:

  1. loại trừ lĩnh vực user từ mẫu mô hình
  2. lưu mẫu với commit=False
  3. thiết job.user
  4. lưu vào cơ sở dữ liệu

Trong trường hợp của bạn:

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

Xem các tài liệu Django trên model form save() method để biết thêm thông tin.

+0

Không nhận ra hàm ModelForm save() trả về một thể hiện của lớp mô hình được chỉ định trong thuộc tính mô hình lớp Meta của biểu mẫu. Cám ơn vì cái này! – AndrewSmiley

Các vấn đề liên quan