gpt4 book ai didi

python - 在 Django 中查找模型字段的类型

转载 作者:行者123 更新时间:2023-11-28 22:03:29 25 4
gpt4 key购买 nike

我有这样一个模型:

class Profile(models.Model):
user = models.OneToOneField("User", verbose_name=u"user", null=True, blank=True, default=None)
monthly_income = models.ForeignKey(MonthlyIncome, verbose_name=u"Monthly Income", null=True, blank=True, default=None)
car = models.ManyToManyField(Car, verbose_name=u"Car?", null=True, blank=True, default=None)

如果用户更改了他的配置文件,这些更改将保存到另一个表 (UpdateLog)。在 View 中,我从 UpdateLog 进行查询,如果项目在 Updatelog 中,则选择框将被禁用。因为禁用的选择框不会向服务器发送任何数据,所以我使用 request.POST.copy() 添加禁用字段的值,如下所示:

在 View 中:

if request.method == "POST":
post_values = request.POST.copy()
query = UpdateLog.objects.filter(user=request.user.id)
for a in query:
field = a.filed_name
try:
sd = eval("profile.%s.id"%field)
post_values.update({field: u"%s"%sd})
except AttributeError:
print field

问题是:sd = eval("profile.%s.id"%field) 仅适用于 ForeignKey 数据。我必须将外键和多对多字段的 sd 分开。我如何识别 View 中模型字段的类型?

最佳答案

我认为您正在寻找这样的东西:

from django.db import models
field_name = a.field_name
field = getattr(profile, field_name)
if isinstance(field, models.Model):
# It's a model object
# (accessing a foreign key returns a model object)
elif isinstance(field, models.manager.Manager):
# It's a manager object
# (accessing a many to many field returns a ManyRelatedManager)
else:
raise ValueError("Unexpected field type")

关于python - 在 Django 中查找模型字段的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9065774/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com