2013-08-06 20 views
0

我有一個有點奇怪的情況。我正在使用通過物業管理軟件訪問的只讀數據庫。它們允許用戶在那裏定義軟件中的字段。但是,它們不會顯示爲數據庫中的特定字段。該數據庫有兩個與它們相關的表格propuserdefinedpropuserdefinedvaluespropuserdefined包含有關該字段(id,名稱,描述)的所有信息propuserdiefinedvalues包含與該屬性相關聯的值。它有propiduserdefinedidvalue。我的問題是,我需要訪問propuserdefinedvalues的值,其中propid等於propid在我的財產屬性聲明和userdefinedid等於49.我將如何做到這一點?它是否帶有模板標籤?訪問一個特定的項目在我的數據庫的聲明

在此先感謝您的幫助。
Brandon

這是我的模型。

class Propuserdefined(models.Model): 
    userdefinedid = models.IntegerField(primary_key=True) 
    name = models.CharField(max_length=50L, blank=True) 
    type = models.IntegerField() 
    userid = models.IntegerField(null=True, blank=True) 
    updated = models.DateTimeField(null=True, blank=True) 
    datecreated = models.DateTimeField(null=True, blank=True) 
    combolist = models.TextField(blank=True) 
    class Meta: 
     db_table = 'propuserdefined' 

class Propuserdefinedvalues(models.Model): 
    userdefinedid = models.IntegerField() 
    propid = models.IntegerField() 
    value = models.TextField(blank=True) 
    userid = models.IntegerField(null=True, blank=True) 
    updated = models.DateTimeField(null=True, blank=True) 
    datecreated = models.DateTimeField(null=True, blank=True) 
    class Meta: 
     db_table = 'propuserdefinedvalues' 

class Property(models.Model): 
    propid = models.IntegerField(primary_key=True) 
    name = models.CharField(max_length=35L, blank=True) 
    shortname = models.CharField(max_length=6L, blank=True) 
    street1 = models.CharField(max_length=50L, blank=True) 
    street2 = models.CharField(max_length=50L, blank=True) 
    city = models.CharField(max_length=50L, blank=True) 
    state = models.CharField(max_length=2L, blank=True) 
    zip = models.CharField(max_length=50L, blank=True) 
    phone = models.CharField(max_length=21L, blank=True) 
    fax = models.CharField(max_length=50L, blank=True) 
    email = models.CharField(max_length=255L, blank=True) 
    manager = models.CharField(max_length=25L, blank=True) 
    billname1 = models.CharField(max_length=35L, blank=True) 
    billname2 = models.CharField(max_length=35L, blank=True) 
    billstreet1 = models.CharField(max_length=50L, blank=True) 
    billstreet2 = models.CharField(max_length=50L, blank=True) 
    billcity = models.CharField(max_length=50L, blank=True) 
    billstate = models.CharField(max_length=2L, blank=True) 
    billzip = models.CharField(max_length=50L, blank=True) 
    proptaxid = models.CharField(max_length=35L, blank=True) 
    rentchargetype = models.CharField(max_length=20L, blank=True) 
    lastpostdate = models.DateField(null=True, blank=True) 
    lastweeklypostdate = models.DateField(null=True, blank=True) 
    comments = models.CharField(max_length=25L, blank=True) 
    enablespeciallatecharge = models.IntegerField(null=True, blank=True) 
    fixedlatecharge = models.IntegerField(null=True, blank=True) 
    fixedlateamount = models.FloatField(null=True, blank=True) 
    fixedlaterentonly = models.IntegerField(null=True, blank=True) 
    percentlate = models.IntegerField(null=True, blank=True) 
    percentlateamount = models.FloatField(null=True, blank=True) 
    percentlatefullcharge = models.IntegerField(null=True, blank=True) 
    percentlaterentonly = models.IntegerField(null=True, blank=True) 
    perdaylate = models.IntegerField(null=True, blank=True) 
    perdaylateamount = models.FloatField(null=True, blank=True) 
    perdaylategrace = models.IntegerField(null=True, blank=True) 
    perdaylategracenum = models.IntegerField(null=True, blank=True) 
    perdatelatelimitamount = models.FloatField() 
    perdaylategracenonretro = models.IntegerField() 
    perdaylategraceexclweekends = models.IntegerField() 
    perdaylategraceexclholidays = models.IntegerField() 
    datecreated = models.DateTimeField(null=True, blank=True) 
    updated = models.DateTimeField(null=True, blank=True) 
    userid = models.IntegerField(null=True, blank=True) 
    logofile = models.CharField(max_length=255L, blank=True) 
    merchantid = models.CharField(max_length=255L, blank=True) 
    epaybankid = models.IntegerField() 
    epaylimit = models.FloatField() 
    epayenabled = models.IntegerField() 
    achconveniencefeeenabled = models.IntegerField() 
    ccconveniencefeeenabled = models.IntegerField() 
    rwaachconvenciencefeeenabled = models.IntegerField() 
    rwaccconveniencefeeenabled = models.IntegerField() 
    epayislimited = models.IntegerField() 
    epayusedefaults = models.IntegerField() 
    achconveniencefee = models.FloatField(null=True, blank=True) 
    ccconveniencefee = models.FloatField(null=True, blank=True) 
    rwaachconveniencefee = models.FloatField(null=True, blank=True) 
    rwaccconveniencefee = models.FloatField(null=True, blank=True) 
    epaychargetype = models.IntegerField() 
    epayamounttype = models.IntegerField() 
    epaysetamount = models.FloatField() 
    epaycustlimit = models.FloatField() 
    sqft = models.IntegerField() 
    lateminbalance = models.FloatField(null=True, blank=True) 
    defaultbank = models.IntegerField() 
    postday = models.IntegerField(null=True, blank=True) 
    active = models.IntegerField(null=True, blank=True) 
    iscommercial = models.IntegerField(null=True, blank=True) 
    assignedissueuserid = models.IntegerField(null=True, blank=True) 
    altname = Propuserdefinedvalues.objects.filter(userdefinedid=49) 
    class Meta: 
     db_table = 'property' 
+0

) - 你已經爲這個數據庫中定義的任何模式?如果是這樣,並且它們被正確定義,那麼你應該只能使用ORM。 – Ben

+0

我確實定義了模型。我用inspectdb來創建它們。模型「userdefinedvalues」包含的值是「userdefinedfields」值。我需要訪問「userdefinedid」= 49且propid =當前屬性循環中的propid的字段。我希望像Property.Propertyuserdefinedvalues.49(這是foreignkey「userdefinedid」)。值 – brandonmhp

+0

你可以發佈你的模型代碼嗎? :) – Ben

回答

0

這聽起來像你正試圖在Django模板中做到這一點。你應該改用Python代碼,因爲Django模板並不是爲此設計的。

該表的Django模型也不會提供訪問這些屬性的最佳界面。相反,你應該在它們之上創建一些功能。或者,您可以編寫在兩個表中進行連接的原始SQL。

+0

使用ForeignKeys設置正確定義的模型應該可以做到這一點嗎? – Ben

0

使用你的模型,因爲它們是(有沒有ForeignKeys定義,所以你不能使用ORM跟隨關係),就可以得到這樣的細節(如果我理解正確你的問題):

property = Property.objects.get(name='my_property_name') # or however you get the property 
prop_user_defined_values = Propuserdefinedvalues.objects.filter(propid=property.id, userdefinedid=49) 

但是,如果你改變了你的模型的順序,這可能短路,並且你的一些字段中鍵入ForiegnKey

class Property(models.Model): 
    # ... rest truncated ... 

class Propuserdefined(models.Model): 
    # ... rest truncated ... 

class Propuserdefinedvalues(models.Model): 
    property = models.ForeignKey(Property, db_column='propid') 
    userdefined = models.ForeignKey(Propuserdefined, db_column='userdefinedid') 
    # ... rest truncated ... 

這將讓你做這樣的事情:

Propuserdefinedvalues.objects.filter(userdefined__name='my_name', property__name='my_property') 
# or: 
my_property = Property.objects.get(name='my_property') 
Propuserdefinedvalues.objects.filter(userdefined__userdefinedid=49, property=my_property) 

我建議你在這裏閱讀關於Django的模型:https://docs.djangoproject.com/en/1.5/topics/db/models/ - 只要你知道關係,即使你有預先存在的表格,它們也很容易得到正確的結果。

(免責聲明:未經測試的代碼可能是bug;)你使用Django,根據標籤

相關問題