我有一个应用程序,有3个模型:播客,剧集和类别。
类别有一个播客的ForeignKey:
class Category(models.Model):
...
podcast = models.ForeignKey(Podcast, on_delete=models.CASCADE)
...因此,一个播客可以有一堆相关的类别。
每一集都可以与播客的类别相关联。我已经将其添加为ManyToManyField:
class Episode(models.Model):
podcast = models.ForeignKey(Podcast, on_delete=models.CASCADE)
categories = models.ManyToManyField(Category)
...问题是,在管理员和模型表单中,类别字段显示了每个播客的每个类别的列表,而不仅仅是与此播客相关的类别。
如何使用limit_choices_to来限制与该事件相关的同一播客的外键类别?我尝试了下面的方法,但显然不起作用,因为'self‘没有定义。
categories = models.ManyToManyField(Category, limit_choices_to={'podcast': self.podcast})如果可能的话,我想在模型级别上这样做,这样我就不需要在应用程序的其余部分添加额外的逻辑。
谢谢你的帮助!
发布于 2020-02-08 08:11:24
对我来说,这似乎是你通常想要在中间模型(本例中是播客)中使用ManyToMany关系的情况。除非您必须保持关系的原样,否则请考虑以下解决方案:
class Category(models.Model):
title = models.CharField(max_length=120)
class Episode(models.Model):
title = models.CharField(max_length=120)
categories = models.ManyToManyField(Category, through='Podcast')
class Podcast(models.Model):
category = models.ForeignKey(Category, on_delete=models.CASCADE)
episode = models.ForeignKey(Episode, on_delete=models.CASCADE)
title = models.CharField(max_length=120)https://docs.djangoproject.com/en/3.0/topics/db/models/#extra-fields-on-many-to-many-relationships
https://stackoverflow.com/questions/60120806
复制相似问题