Class A(models.Model):
text = models.CharField(...)
Class B(models.Model):
a = models.ForeignKey('A')
more_text = models.CharField(...)
A
。instance._meta.fields
获取所有字段。many_to_many
获取instance._meta.many_to_many
字段。我如何获得相关模型? (以通用方式)
我想要这个的原因是因为如果我想在模板上显示A
的实例,A
不完整而没有来自B
的外键关系。
答案 0 :(得分:1)
1)首先猜测你的意思是什么:
models.ForeignKey('A', related_name='my_model_b')
然后在模板中你可以{{ a.my_model_b_set.all }}
将所有B对象附加到给定的A对象。
2)第二次猜测你的意思是什么:
如果您有一个表单,您可以在其中创建 B 对象,并且您需要类似"预先存储"连接到 A 的对象然后你需要通过AJAX调用选择 A 对象发送并做更进一步的操作(例如在此模型中另一个Fk字段中的过滤器选择)
答案 1 :(得分:1)
这将为您提供所有相关模型的名称:
models = [r.var_name for r in a_obj._meta.get_all_related_objects()]
答案 2 :(得分:0)
我几天前解决了这个问题:
模型是这样的:
from model_utils.managers import InheritanceManager
Class A(models.Model):
"""
@documention
"""
text = models.CharField(...)
related_content = models.ManyToManyField(
"self", null=True, blank=True, )
objects = InheritanceManager()
Class B(models.Model):
"""
@documention
"""
a = models.ForeignKey('A')
more_text = models.CharField(...)
注意InheritanceManager
class BDetailView(generic.DetailView):
"""
@documention
"""
model = B
def get_context_data(self, **kwargs):
context = super(BDetailView, self).get_context_data(**kwargs)
context['related_content'] = A.objects.filter(
related_content=self.object).select_subclasses()
return context
使用model_utils,我可以获得实际的相关模型,而不是'A'实例(缺少大量特定内容)