Python 我有一个复杂的模型问题。。。更多信息在里面
所以基本上我的应用程序当然有用户,每个用户可以创建5个“ModelA”实例。很简单,但也有与“ModelA”和用户模型相关的“ModelB”。我希望用户能够创建总共15个“ModelB”实例,但每个“ModelA”实例只能有5个与之关联的“ModelB”实例 有什么建议吗 我处理每个用户5个“ModelA”实例的第一部分的方式如下:Python 我有一个复杂的模型问题。。。更多信息在里面,python,django,django-models,Python,Django,Django Models,所以基本上我的应用程序当然有用户,每个用户可以创建5个“ModelA”实例。很简单,但也有与“ModelA”和用户模型相关的“ModelB”。我希望用户能够创建总共15个“ModelB”实例,但每个“ModelA”实例只能有5个与之关联的“ModelB”实例 有什么建议吗 我处理每个用户5个“ModelA”实例的第一部分的方式如下: def clean(self): new_instance = self.__class__ if (new_instance.ob
def clean(self):
new_instance = self.__class__
if (new_instance.objects.count() > 4):
raise ValidationError(
"Users may only create 5 %s." % new_instance.verbose_name_plural
)
super(ModelA, self).clean()
谢谢
编辑:(假定内置Django用户功能)
基本上,用户可以创建5个“ModelA”实例,每个实例可以创建3个“ModelB”实例
如何在模型逻辑中做到这一点
谢谢这行吗
class ModelB(models.Model):
user = models.ForeignKey(User)
modelA = models.ForeignKey('ModelA', related_name = 'modelbs')
other_field = models.CharField(max_length=50)
def clean(self):
if (self.modelA.modelbs.all().count() > 2):
raise ValidationError(
"ModelA may create may only create 3 modelBs "
)
super(ModelB, self).clean()
class ModelA(models.Model):
user = models.ForeignKey(User, related_name = 'modelas')
other_field = models.CharField(max_length=50)
def clean(self):
if (self.user.modelas.all().count() > 2):
raise ValidationError(
"User may create may only create 3 modelAs "
)
super(ModelA, self).clean()
如果你能分享一下模型的定义,那会很有帮助的。我不确定,但我会测试一下。
class ModelB(models.Model):
user = models.ForeignKey(User)
modelA = models.ForeignKey('ModelA', related_name = 'modelbs')
other_field = models.CharField(max_length=50)
def clean(self):
if (self.modelA.modelbs.all().count() > 2):
raise ValidationError(
"ModelA may create may only create 3 modelBs "
)
super(ModelB, self).clean()
class ModelA(models.Model):
user = models.ForeignKey(User, related_name = 'modelas')
other_field = models.CharField(max_length=50)
def clean(self):
if (self.user.modelas.all().count() > 2):
raise ValidationError(
"User may create may only create 3 modelAs "
)
super(ModelA, self).clean()