2017-11-07 6 views
0

django継承管理サイト - なぜチャーフィールドはツリーを自動的にフォローダウンするのに対して、定義されたクラスはフィールドにないのですか?私は何時間も答えを探していましたが、これは私の最初の質問ですので、優しくしてください。ここdjango継承管理サイト - charfieldsはツリーを自動的にフォローするのに対し、定義されたクラスはフィールドにないのはなぜですか?

は私のmodels.pyは

from django.db import models 
import datetime 
from django.db.models import EmailField 


class XObj(models.Model): 
    auto_increment_id = models.AutoField(primary_key=True) 
    creation_date = models.DateTimeField(default=datetime.datetime.now) 

    def __str__(self): 
     return str(self.creation_date.datetime) 

    def date_created(self): 
     return self.creation_date 

    def date_last_change(self): 
     return str(self.auto_increment_id) 


class Address(XObj): 
    # todo: differentiate between US and non US addresses and validate 
    house = models.CharField(max_length=20, default="") 
    street = models.CharField(max_length=200, default="") 
    street2 = models.CharField(max_length=200, default="") 
    city = models.CharField(max_length=200, default="") 
    state = models.CharField(max_length=200, default="") 
    zipcode = models.CharField(max_length=200, default="") 
    country = models.CharField(max_length=200, default="") 

    def __str__(self): 
     return str(self.house, self.street, self.street2, self.city, self.state, self.zipcode, self.country) 


class Entity(XObj): 
    full_name = models.CharField(max_length=200, default="") 
    # todo: validate email 
    email = EmailField() 

    # def _init_(self): 
    #  self.full_name = models.CharField(max_length=200, default="") 
    # 
    def __str__(self): 
     return "Entity" 


class Person(Entity): 
    first_name = models.CharField(max_length=200, default="") 
    last_name = models.CharField(max_length=200, default="") 
    address = Address 

    # def _init_(self): 
    #  self.first_name = models.CharField(max_length=200, default="") 
    def __str__(self): 
     return self.full_name 

class Vendor(XObj): 
    name = models.CharField(max_length=200, default="") 
    address = Address 
    website = models.URLField 
    point_of_contact = Person 

    def __str__(self): 
     return self.name 

class Hotel(Vendor): 

    def __str__(self): 
     return self.name 

class Restaurant(Vendor): 
    def __str__(self): 
     return self.name 

class Lounge(Vendor): 
    def __str__(self): 
     return self.name 

であり、ここで私のadmin.pyである:ここでは

from django.contrib import admin 
from .models import Person, Address, Entity, Vendor, Hotel, Restaurant, Lounge 

class AddressAdmin(admin.ModelAdmin): 
    list_display = [field.name for field in Address._meta.fields if field.name !="id"] 
# TODO: add implementation for non charfields 
admin.site.register(Person) 
admin.site.register(Address, AddressAdmin) 
admin.site.register(Entity) 
admin.site.register(Vendor) 
admin.site.register(Hotel) 
admin.site.register(Restaurant) 
admin.site.register(Lounge) 

は人のために私のアドオンである:ここでは

Person Admin Site Output

です私の住所:

Address Admin Site Output

なぜ人物追加管理ページにアドレスフィールドがないのですか?

スペードのエース、私のしてください:)

+0

「address = Address」と「point_of_contact = Person」とは何を意味していますか?あなたがそれらの行を削除する場合、人adminからのフィールドはまだ失われていますか? – Alasdair

答えて

0

は、あなたのモデルが

class Person(Entity): 
    first_name = models.CharField(max_length=200, default="") 
    last_name = models.CharField(max_length=200, default="") 
    address = models.ForeignKey(
    'Address', 
    on_delete=models.CASCADE, 
) 

を修正、それの後に、移行を行う覚えていなければなりませんForeignKey

を見てください。また、djangoにはすべてのモデルのauto_increment_idが組み込まれているため、書き直す必要はありません。

+0

ありがとうございます@ウィンドゥーン!あなたの変更を加えました(auto_increment_idも)、今私は自分が望むものを見ています。私はこのドキュメントの一部を探求する必要があります。私は物事が少し違っているC#から来ています...違う。 – LeMMy

関連する問題