我有這個使用繼承的模型設計實現,所以編輯器和作者是從人類繼承的,我這樣做是爲了當作者成爲編輯器或反之亦然時,我不會有重複的數據,當然也可以使如果我想顯示所有人,無論他們的工作描述如何(因爲他們都是人),列表更容易列出。如何在django中實現繼承來簡化和刪除數據重複?
現在我創建了我的代碼來做到這一點在Django中,並設置我的admin.py能夠快速添加數據,我的問題是它沒有做我認爲應該做的,我想當我添加作者,生病只是從下拉列表中選擇人的價值觀,並將其保存爲作者,但其顯示的名字,中間名,姓氏文本框等,而不是
我的問題是如何使它不適合只是從下拉選擇當我保存它時,從下拉列表中選擇的項目的ID將被保存,而不是整個文件名,中間名,姓氏等。(目前顯示運行時顯示的那個)
我檢查了生成的sq爲這些類創建命令,我發現編輯器和作者類使人成爲他們的FK,所以即時猜測它的可能性,但仍然沒有找到確切的解決方案。
下面是我寫的包含一些問題的代碼。非常感謝。
# model.py
from __future__ import unicode_literals
from django.db import models
class Person(models.Model):
GENDER_CHOICES = (
('0','unknown'),
('1','male'),
('2','female'),
)
firstname = models.CharField(max_length=50)
middlename = models.CharField(max_length=50, blank=True)
lastname = models.CharField(max_length=50)
gender = models.CharField(max_length=1, choices=GENDER_CHOICES, default=0)
other_info = models.TextField(blank=True)
def __str__(self):
fullname = self.lastname + ', ' + self.firstname[0]+'.'
return fullname.encode("utf-8")
class Editor(Person):
active = models.BooleanField(default=True)
years_experience = models.IntegerField()
def __str__(self):
fullname = self.lastname + ', ' + self.firstname[0]+'.'
return fullname.encode("utf-8")
class Author(Person):
active = models.BooleanField(default=True)
def __str__(self):
fullname = self.lastname + ', ' + self.firstname[0]+'.'
return fullname.encode("utf-8")
#admin.py
from django.contrib import admin
from .models import Person, Editor, Author
admin.site.register(Person)
admin.site.register(Editor)
admin.site.register(Author)
它的工作原理,但有沒有辦法做到這一點使用繼承?即仍然必須從Person類繼承? – rcd