Django ManyToManyField跨模型删除
我有以下低效的“破坏”方法来删除刺激中的评级,而刺激本身是在实验中进行的(为了清晰起见,我简化了我的模型) 你能建议一种更有效的方法来实现这一点吗Django ManyToManyField跨模型删除,django,django-models,Django,Django Models,我有以下低效的“破坏”方法来删除刺激中的评级,而刺激本身是在实验中进行的(为了清晰起见,我简化了我的模型) 你能建议一种更有效的方法来实现这一点吗 class Rating(models.Model): rater = TextField(null=True) rating = FloatField(null=True) created = models.DateTimeField(null=True) class Stimulus(TimeStampedModel)
class Rating(models.Model):
rater = TextField(null=True)
rating = FloatField(null=True)
created = models.DateTimeField(null=True)
class Stimulus(TimeStampedModel):
genes = TextField()
weights = ListField()
ratings = ManyToManyField(Rating, null=True)
evaluation = FloatField(null=True)
complete = BooleanField(default=False)
Class Experiment(models.Model):
all_individuals = ManyToManyField(Stimulus, null=True)
def destroy(self):
all_ratings = Rating.objects.all()
for ind in self.all_individuals.all():
ratings = ind.ratings.all()
for rating in ratings:
if rating in all_ratings:
Rating.objects.filter(id = rating.id).delete()
背景:我正在使用Django运行一个实验,向用户显示许多刺激。每种刺激都会被多次评级。因此,我需要保存每个刺激的多个评分(以及每个实验的多个刺激)。一些简单的改进
如果所有_评级中的评级
,则所有评级都将在所有评级列表中def destroy(self):
for ind in self.all_individuals.prefetch_related('ratings'):
ratings = ind.ratings.all().delete()
我认为在这种情况下,使用ManyToManyField并不是最好的选择 如果使用common ForeignKey稍微改变一下此模型的结构,问题就会少一些 例如 这是一个更清晰的结构,当您删除实验时,
Experiment\u instance.delete()
删除级联将删除所有其他相关模型
希望能有所帮助。不过,这不是被删除的实验,而是一个愚蠢的问题的预先评级。我认为ForeignKey只允许你在给定的“单元格”中有一个实例,而不是很多。我将用一点背景知识更新我的问题,这将有助于澄清我的情况。
self.all_individuals.prefetch_related('ratings'):
def destroy(self):
for ind in self.all_individuals.prefetch_related('ratings'):
ratings = ind.ratings.all().delete()
class Rating(models.Model):
rater = TextField(null=True)
rating = FloatField(null=True)
created = models.DateTimeField(null=True)
stimulus = models.ForeignKey('Stimulus', related_name='ratings')
class Stimulus(TimeStampedModel):
genes = TextField()
weights = ListField()
#ratings = ManyToManyField(Rating, null=True)
evaluation = FloatField(null=True)
complete = BooleanField(default=False)
experiment = models.ForeignKey('Experiment', related_name='stimulus')
class Experiment(models.Model):
#all_individuals = ManyToManyField(Stimulus, null=True)
name = models.CharField(max_length=100)