Sql Django admin:以编程方式选择内联中的可见字段集
我想要的是能够根据django Admin中ForeignKey选择器的选择来选择要显示的表单集 我有四种型号:Sql Django admin:以编程方式选择内联中的可见字段集,sql,django,django-forms,django-admin,formsets,Sql,Django,Django Forms,Django Admin,Formsets,我想要的是能够根据django Admin中ForeignKey选择器的选择来选择要显示的表单集 我有四种型号: 产品 评级 准则(问题) 标准功率 我的数据库组织如下: Product <- ManyToOne -- Rating <- ManyToMany -> Criterion - | | -- OneToMany -> CriterionAnsw
Product <- ManyToOne -- Rating <- ManyToMany -> Criterion -
| |
-- OneToMany -> CriterionAnswer <- OneToMany --
################
# Product
################
class Product (models.Model):
rating = models.ForeignKey(
'Rating',
on_delete=models.SET_NULL,
null=True,
)
def save(self, *args, **kwargs):
super(Product, self).save(*args, **kwargs)
# get all criteria that need an answer in order to create the rating
criteriaToAnswer = Criterion.objects.filter(rating=self.rating)
# iterate over all criterias and check if the answer exists in database
for crit in criteriaToAnswer:
# if it doesn't exist, create an answer
if not CriterionAnswer.objects.filter(criterion=crit).filter(product=self):
print "Criteria answer to: <%s> does not exist... creating new one" % crit.__str__()
new_criterionAnswer = CriterionAnswer()
new_criterionAnswer.criterion = crit
new_criterionAnswer.product = self
new_criterionAnswer.save()
else:
print "Criteria answer to: <%s> exists." % crit.__str__()
################
# CriterionAnswer
################
class CriterionAnswer(models.Model):
criterion = models.ForeignKey('Criterion', on_delete=models.CASCADE)
product = models.ForeignKey('Product', on_delete=models.CASCADE)
################
# Rating
################
class Rating(models.Model):
name = models.CharField(max_length=30)
################
# Criterion
################
class Criterion(models.Model):
category = models.ForeignKey(
'Category',
on_delete=models.PROTECT,
)
rating = models.ManyToManyField(
'Rating',
through='CriterionInRating',
through_fields=('criterion', 'rating'),
)
class ProductAdmin(admin.ModelAdmin):
inlines = [
# Something here...
]
# Or something here that could solve my problem.