gpt4 book ai didi

python - 数据模型依赖,我可以简化这些对象吗?

转载 作者:太空宇宙 更新时间:2023-11-04 05:51:54 27 4
gpt4 key购买 nike

基本上我有 6 个对象模型,3 个用于我的常规对象,3 个用于这些对象的依赖项。单独地,这些对象可以依赖于 3 个常规对象中每一个的一个或多个实例。

我的问题:这是最佳做法吗?我基本上希望能够在需要时向常规对象添加新的依赖项。例如:

a = A.objects.get(id=1)
adependency = ADependencies.objects.get(dependentTo=a)

然后,我将拥有一个对象,其中包含 a 的所有依赖项。


或者,我确实想到了将3个依赖对象合并为一个的方法;但是,我不确定这是否是一种好的做法。

class Dependencies(models.Model):
id = models.CharField(max_length=16)
dependentTo = CharField(max_length=16)
a = models.ManyToManyField(A)
b = models.ManyToManyField(B)
c = models.ManyToManyField(C)

在这种情况下,我不使用 ForeignKey 来映射 dependentTo 对象。相反,我会使用对象 ID 来拉取对象——让我成为类不可知论者;但是,这需要 3 个常规对象的唯一 ID。

a = A.objects.get(id=1)
adependency = ADependencies.objects.get(dependentTo=a.id)

还有一个想法!是否可能仍然使用 ForeignKey,但传入一个带有类名的字符串?

class Dependencies(models.Model):
id = models.CharField(max_length=16)
type = models.CharField(max_length=16)
dependentTo = ForeignKey(type)
a = models.ManyToManyField(A)
b = models.ManyToManyField(B)
c = models.ManyToManyField(C)

对象模型:

class A(models.Model):
id = models.CharField(max_length=16)
title = models.CharField(max_length=32)
summary = models.CharField(max_length=256)

class B(models.Model):
id = models.CharField(max_length=16)
title = models.CharField(max_length=32)
summary = models.CharField(max_length=256)
a = models.ForeignKey(A)

class C(models.Model):
id = models.CharField(max_length=16)
title = models.CharField(max_length=32)
summary = models.CharField(max_length=256)
b = models.ForeignKey(B)

class ADependencies(models.Model):
id = models.CharField(max_length=16)
dependentTo = models.ForeignKey(A)
a = models.ManyToManyField(A)
b = models.ManyToManyField(B)
c = models.ManyToManyField(C)

class BDependencies(models.Model):
id = models.CharField(max_length=16)
dependentTo = models.ForeignKey(B)
a = models.ManyToManyField(A)
b = models.ManyToManyField(B)
c = models.ManyToManyField(C)

class CDependencies(models.Model):
id = models.CharField(max_length=16)
dependentTo = models.ForeignKey(B)
a = models.ManyToManyField(A)
b = models.ManyToManyField(B)
c = models.ManyToManyField(C)

谢谢!

最佳答案

这可以做得更简单。定义一个 Dependency 模型而不是一个 Dependencies 模型。您将需要 contenttypes django 贡献:

from django.db import models
from django.contrib.contenttypes.fields import GenericForeignKey
from django.contrib.contenttypes.models import ContentType

class Dependency(models.Model):
dependent_contenttype = models.ForeignKey(ContentType)
dependent_id = models.PositiveIntegerField()
dependent = GenericForeignKey('dependent_contenttype', 'dependent_id')

prerequisite_contenttype = models.ForeignKey(ContentType)
prerequisite_id = models.PositiveIntegerField()
prerequisite = GenericForeignKey('prerequisite_contenttype',
'prerequisite_id')

然后,如果您愿意,可以在模型 ABC 上使依赖关系成为反向泛型关系:

class A:
# ...
dependencies = GenericRelation(
Dependency,
content_type_field='dependent_contenttype',
object_id_field='dependent_id')

关于python - 数据模型依赖,我可以简化这些对象吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29859128/

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