Python 在my for语句中访问数据库中的特定项
我有一个有点奇怪的场景。我使用的是一个只读数据库,我可以通过我的物业管理软件访问该数据库。它们允许用户在软件中定义字段。但是,它们不会在数据库中显示为特定字段。数据库有两个与其相关的表Python 在my for语句中访问数据库中的特定项,python,django,Python,Django,我有一个有点奇怪的场景。我使用的是一个只读数据库,我可以通过我的物业管理软件访问该数据库。它们允许用户在软件中定义字段。但是,它们不会在数据库中显示为特定字段。数据库有两个与其相关的表propuserdefined和propuserdefinedvalues。propuserdefined包含有关字段的所有信息(id、名称、描述),propuserdiefinedvalues包含与属性关联的值。它有propid、userdefinedid和值。我的问题是,我需要访问propuserdefined
propuserdefined
和propuserdefinedvalues
。propuserdefined
包含有关字段的所有信息(id、名称、描述),propuserdiefinedvalues
包含与属性关联的值。它有propid
、userdefinedid
和值
。我的问题是,我需要访问propuserdefinedvalues
的值,其中propid
等于我的for properties in properties语句中的propid
,而userdefinedid
等于49。我该怎么做?它有模板标签吗
提前感谢您的帮助。布兰登 这是我的模型
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'
听起来您正试图在Django模板中执行此操作。您应该改为使用Python代码,因为Django模板不是为此而设计的
表的Django模型也不会提供访问这些属性的最佳接口。相反,您应该在它们之上创建一些函数。或者,您可以编写跨两个表进行连接的原始SQL。使用您的模型(没有定义foreignkey,因此您不能使用ORM来跟踪关系),您可以获得如下详细信息(如果我正确理解了您的问题): 但是,如果您更改了模型的顺序,并且将某些字段键入
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的模型:-它们很容易得到正确的结果,即使您有预先存在的表,只要您知道它们之间的关系
(免责声明:未测试的代码!可能是bug;)根据标签,您正在使用django-您是否为此数据库定义了任何模型?如果是这样,并且它们定义正确,那么您应该能够使用ORM。我已经定义了模型。我使用inspectdb创建它们。模型“userdefinedvalues”包含“userdefinedfields”值。我需要访问当前属性循环中“userdefinedid”=49和propid=propid的字段。我希望得到类似Property.Propertyuserdefinedvalues.49(这是外键“userdefinedid”)。Values您可以发布您的模型代码吗?:)您使用的是
syncdb
还是oyu自己创建的SQL?我使用的是inspectdb,因为这是我的物业管理软件创建的只读数据库。正确定义的模型和设置的ForeignKey应该可以做到这一点?
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)