2012-03-14 37 views
7

Câu hỏi nhanh (có thể là ngu xuẩn). Đây là luồng của trang web của tôi: Người dùng đăng nhập và được chuyển hướng đến trang quản trị tùy chỉnh. Trên trang quản trị này, họ có khả năng tạo một 'Hồ sơ'. Tôi muốn kết hợp Tiểu sử mà họ tạo với dữ liệu Người dùng của họ sao cho 1 Người dùng liên kết với 1 Tiểu sử.Kết nối với Mô hình Người dùng trong Django

Đối với một số lý do sau đây không hoạt động (chỉ cần cố gắng để kết hợp

UserAdmin.Models

from django.db import models 
from django.contrib.auth.models import User 

class Profile(models.Model): 
    username = models.ForeignKey(User) 
    firstname = models.CharField(max_length=200) 
    lastname = models.CharField(max_length=200) 
    email = models.EmailField(max_length=200) 

    def __unicode__(self): 
     return self.username 

UserAdmin.Views

def createprofile(request): 

    user = User.objects.get(id=1) 
    profile = Profile(username=user, firstname='Joe', lastname='Soe', email='[email protected]') 
    profile.save() 

tôi tiếp tục nhận được: bảng useradmin_profile không có cột có tên là usern ame_id

Bất kỳ ý tưởng nào? Đánh giá cao.

EDIT:

Deleted db của tôi và chạy một syncdb tươi, thay đổi tên người dùng = models.OneToOneField (Thành viên). Bây giờ tôi cam nhận được Không thể gán "uuperuperuser" ":" Profile.username "phải là một" User "instance.

Trả lời

9

UserAdmin.Models

from django.db import models 
from django.contrib.auth.models import User 

class Profile(models.Model): 
    user = models.OneToOneField(User) 

    def __unicode__(self): 
     return self.user.get_full_name() 

UserAdmin.Views

def createprofile(request): 

    user_ = User.objects.get(pk=1) 
    profile = Profile(user=user_) 
    profile.user.first_name = 'Joe' 
    profile.user.last_name = 'Soe' 
    profile.user.email = '[email protected]' 
    profile.user.save() 
    profile.save() 
+0

Hmm, cảm ơn. Bây giờ tôi nhận được: Không thể gán "u'John '": "Profile.username" phải là phiên bản "Người dùng". (John là tên người dùng) – user1059105

+0

Đã chỉnh sửa mã ... Hãy thử điều đó. Bạn sẽ phải làm một syncdb tươi mặc dù. – Scalamoosh

+0

Hmm. Được rồi thử với một syncdb tươi. Vỏ sẽ in ra một khoảng trắng khi tôi cố gắng truy cập in a.first_name trong đó a = Người dùng. Khi tôi cố gắng truy cập vào đối tượng Profile và làm Profile.objects.all() tôi nhận được [] được in thay vì full_name(). Bất kỳ ý tưởng? – user1059105

2

Bạn syncdb'ed mô hình hồ sơ trước khi bạn có một lĩnh vực ForeignKey username. Django sẽ chỉ tạo bảng nhưng sẽ không thay đổi chúng khi chúng đã được tạo. Dưới đây là câu trả lời liệt kê các tùy chọn của bạn: https://stackoverflow.com/a/7693297/990224.

Và bạn nên suy nghĩ về đổi tên username thành user.

+0

Xóa db và thực hiện một syncdb mới không giải quyết được vấn đề, như được thể hiện trong câu trả lời khác. – user1059105

+0

Vâng, bạn phải quyết định xem bạn có muốn lưu tên người dùng hoặc Người dùng hay không. Những gì 'Không thể gán" u'superuser '":" Profile.username "phải là một" User "instance' cho bạn biết rằng bạn đang cố lưu tên người dùng trong Profile.username. Nhưng Profile.username phải là người dùng. Vì vậy, hoặc là chuyển người dùng hoặc thay đổi OneToOneField của bạn thành CharField. – roam

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