2011-04-18 218 views
0

我有寵物的典範,它看起來像動態字段添加到Django模型

class Pet(models.Model): 

STATUS_CHOICES=(
    (1,'Listed for sale'), 
    (2,'Dead'), 
    (3,'Sold'), 
) 
name = models.CharField(_("name"), max_length=50) 
species = models.ForeignKey(PetSpecies, related_name = "pets") 
pet_category = models.ForeignKey(PetCategory, related_name = "pets") 
pet_type = models.ForeignKey(PetType, related_name = "pets") 

# want to add dynamic fields here depends on above select options(species, category, type) 

color = models.CharField(_("color"), max_length=50, null=True, blank=True) 
weight = models.CharField(_("weight"), max_length=50, null=True, blank=True) 

我看了Dynamic Models,這將是對我有幫助嗎?還是我應該做點別的?如果有人知道請用一段代碼引導我。

謝謝:)

+0

爲什麼重量是CharField? – 2011-04-18 07:32:40

+0

我大致進入這些領域..要專注於動態領域... – Ahsan 2011-04-18 07:39:28

+0

我很確定動態領域不是你在找什麼。你有任何你想添加的例子,取決於類別,物種,類型? – DTing 2011-04-18 07:51:45

回答

1

其實,你分享的鏈接是不是你所需要的...

你需要的是能夠指出錯誤類型定義和記錄,與之相關的數據庫表結構......在這一點上,你可能需要改變你的數據庫表結構...

首先,你可以定義將存儲等類別標籤

class PetTyper(models.Model): 
    specy = models.ForeignKey(...) 
    category = models.ForeignKey(...) 
    type = models.Foreignkey(...) 
    ... 
    additional_fields= models.ManyToManyField(AdditionalFields) 

class AdditionalFields(Models.Model): 
    label = models.CharField(_("Field Label") 
0123表

PetTyper是寵物類型的基本記錄表,因此您將在此表中定義每個寵物,附加字段將顯示每個記錄上將顯示哪些額外的字段。不要忘記,這些表將記錄基本型和附加struvcture,沒有添加動物的記錄..

所以這樣一個記錄可能包含這樣的信息:

pettYpe:哺乳動物,狗,拉布拉多獵犬,ADDITIONAL_INFO = [顏色,重量]

,它告訴你記錄爲拉布拉多Retreiver任何狗都會有顏色和重量信息...

對於每個拉布拉多Retreiver記錄到數據庫將數據記錄到這些表:

class Pet(models.Model): 
    name = models.CharField(...) 
    typer = models.ForeignKey(PetTyper) # this will hold records of type, so no need for specy, category and type info in this table 
    ... # and other related fields 

class petSpecifications(models.Model): 
    pet = Models.ForeignKey(Pet) # that data belongs to which pet record 
    extra_data_type = Models.ForeignKey(AdditionalFields) # get the label of the extra data field name 
    value = models.CharField(...) # what is that extra info value 

所以當你創建一個新的寵物條目時,你將定義一個petTyper並將每個附加字段數據的名稱添加到AdditionalFields中。在新的寵物記錄表單中,您將首先獲得寵物typer,然後從AdditionalFields表中獲取每個附加信息數據。用戶在選擇類型後會輸入一個寵物名稱,然後添加顏色和重量信息(從上面的示例)。您將從表單中獲取這些信息,並在寵物表上創建一個記錄,並將關於該記錄的每個特定信息添加到petSpecifications表中...

這種方式非常困難,您不能使用一些基本的django功能lke表單模型等。因爲您從PetTyper和AdditionalFields表中讀取數據並通過這些信息獲取表單。並將發佈的信息記錄到Pet和petSpecifications表中...

+0

感謝FallenAngel :) – Ahsan 2011-04-18 11:16:53

+0

這是一個快速的答案,所以如果它看起來複雜而難以理解,我會試着更具體地解釋它。對不起。 – FallenAngel 2011-04-18 11:52:35