2016-04-11 24 views
1

Kullanıcı Kullanıcıları admin sekmesine Kullanıcı Kullanıcıları ekleme bir sekme.Kullanıcı alanları UserProfile admin sekmesinde satır içilamıyor - 'auth.User' için 'MyApp.UserProfile' adlı bir ForeignKey yok

DÜZENLEME:

<class 'MyApp.admin.UserProfileUserInline'>: (admin.E202) 'auth.User' has no ForeignKey to 'MyApp.UserProfile'. 

Aslında, Kullanıcı Kullanıcıprofili veya Kullanıcıprofili inlined ya Kullanıcıyı istiyorum: Düzenlenen kod hala Shang Wang'ın yorumuna göre ancak hata tutarsa ​​sorun cmd döner olmasıdır. Sorun, UserProfile alanı language (bu bir dil modeli değil) olduğunu through-model olan ve Kullanıcıya nasıl bir satır içi (UserProfile sorun olmadan satır içi) olduğunu anlayamıyorum, bu yüzden çalışıyorum UserProfile içine kullanıcı inline.

Admin.py:

from django.contrib import admin 
from models import * 
from django.contrib.auth.admin import UserAdmin as BaseUserAdmin 
admin.site.register(AdminContact) 

class UserProfileInline(admin.StackedInline): 
    model = UserProfile 
    can_delete = False 
    verbose_name_plural = 'User_Profile' 
    readonly_fields = ('languages',) 

class UserProfileLanguageLevelInline(admin.TabularInline): 
    model = UserProfileLanguage 

class UserAdmin(BaseUserAdmin): 
    inlines = (UserProfileInline,) 

class UserProfileUserInline(admin.StackedInline): 
    model = User 

class UserProfileAdmin(admin.ModelAdmin): 
    inlines = (UserProfileLanguageLevelInline,User,) 

admin.site.unregister(User) 
admin.site.register(User,UserAdmin) 
admin.site.register(LanguageTuple) 
admin.site.register(Language) 
admin.site.register(Job) 
admin.site.register(UserProfileLanguage) 
admin.site.register(Level) 
admin.site.register(UserProfile,UserProfileAdmin) 

Models.py: User bir model değildir bir satır içi yönetici olduğu için, UserProfileAdmin için inlines yılında User modeli olmamalıdır

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

class AdminContact(models.Model): 
    email = models.EmailField() 
    telephone = models.CharField(max_length=40) 

    def __unicode__(self): 
     return self.email 

class Language(models.Model): 
    shortcut = models.CharField(max_length=40) 
    name = models.CharField(max_length=40) 

    def __str__(self): 
     return self.name 


class LanguageTuple(models.Model): 
    language_from = models.ForeignKey(Language, related_name='language_from', null=True) 
    language_to = models.ForeignKey(Language, related_name='language_to', null=True) 

    def __str__(self): 
     return '{} to {}'.format(self.language_from, self.language_to) 


class Level(models.Model): 
    LEVEL_CHOICES = (
     ('unknown','Unknown'), 
     ('standard','Standard level'), 
     ('professional','Professional level'), 
     ('native','Native speaker level'), 
    ) 
    name = models.CharField(max_length=40,choices=LEVEL_CHOICES, blank=False, null=False) 
    price_multiplier = models.FloatField() 

    def __str__(self): 
     return self.get_name_display() 


class UserProfile(models.Model): 
    user = models.OneToOneField(User, related_name='userprofile') 
    date_of_birth = models.DateField(null=True,blank=True) 
    telephone = models.CharField(max_length=40,null=True,blank=True) 
    IBAN = models.CharField(max_length=40,null=True,blank=True) 
    created = models.DateTimeField(auto_now_add=True) 
    modified = models.DateTimeField(auto_now=True) 


    MARITAL_STATUS_CHOICES = (
     ('single', 'Single'), 
     ('married', 'Married'), 
     ('separated', 'Separated'), 
     ('divorced', 'Divorced'), 
     ('widowed', 'Widowed'), 
    ) 
    marital_status = models.CharField(max_length=40, choices=MARITAL_STATUS_CHOICES, null=True, blank=True) 

    HOW_DO_YOU_KNOW_ABOUT_US_CHOICES = (
     ('coincidence', u'It was coincidence'), 
     ('relative_or_friends', 'From my relatives or friends'), 
    ) 
    how_do_you_know_about_us = models.CharField(max_length=40, choices=HOW_DO_YOU_KNOW_ABOUT_US_CHOICES, null=True, 
               blank=True) 

    # TRANSLATOR ATTRIBUTES 

    is_translator = models.BooleanField(default=False) 

    # language_tuples = models.ManyToManyField(LanguageTuple,blank=True) 
    languages = models.ManyToManyField(Language, through='UserProfileLanguage') 

    rating = models.IntegerField(default=0) 

    number_of_ratings = models.BigIntegerField(default=0) 

    def __unicode__(self): 
     return '{} {}'.format(self.user.first_name, self.user.last_name) 

    def __str__(self): 
     return '{} {}'.format(self.user.first_name, self.user.last_name) 

class UserProfileLanguage(models.Model): 
    userprofile = models.ForeignKey(UserProfile) 
    language = models.ForeignKey(Language) 
    level = models.ForeignKey(Level) 

    class Meta: 
     unique_together = (('userprofile', 'language'),) 


class Job(models.Model): 
    customer = models.ForeignKey(User, related_name='orders') 
    translator = models.ForeignKey(User, related_name='jobs',null=True) 
    price = models.FloatField(null=True,blank=True) 

    # ZADAVA CUSTOMER 
    description = models.TextField() 
    file = models.FileField(null=True,blank=True) 
    language_tuple = models.ForeignKey(LanguageTuple,related_name='jobs') 
    specialist = models.BooleanField(blank=True) 

    created = models.DateTimeField(auto_now_add=True) 
    modified = models.DateTimeField(auto_now=True) 

    is_active = models.BooleanField(default=False) 

    is_done = models.BooleanField(default=False) 

    @property 
    def has_translator(self): 
     return self.translator_id is not None 


    def __str__(self): 
     return '{}: {}'.format(self.customer,self.language_tuple) 

cevap

0

.

class UserProfileAdmin(admin.ModelAdmin): 
    inlines = (UserProfileLanguageLevelInline, UserProfileUserInline) 
+0

Teşekkür ama şimdi Hata yükseltir: bu şekilde düzenleyin : (admin.E202) 'au th.User' 'SolutionsForLanguagesApp.UserProfile' hayır ForeignKey sahip . –

+0

Emin değilim, ama bence çok fazla ilişki oluşturduğunuzda, 'UserProline' içinde 'UserInline' var, ve 'User' içinde UserProfileInline' var, sanırım gerekli değil. Ben sadece UserAdmin'i tutmalı ve bunun için “userpfile” ini satır içi tutmalısınız. –

İlgili konular