Comments (4)
Is this feature really needed, or can the same thing be done with a ParentalKey on the through model (i.e. the way we 'faked' M2M relationships before ParentalManyToManyField
was implemented)...?
from django-modelcluster.
This feature is really useful for projects with models that were implemented before modelcluster/Wagtail introduced M2M support. So models like
class BarToFoo(models.Model):
foo = models.ForeignKey('appname.FooModel', blank=True, null=True)
page = models.ParentalKey('BarPage', related_name='something')
can be modified to become:
class BarToFoo(models.Model):
foo = models.ForeignKey('appname.FooModel', blank=True, null=True)
page = models.ForeignKey('BarPage', related_name='+')
Then you just need to add something = ParentalManyToManyField(..., through='appname.BarToFoo')
and replace InlinePanel
in the "target" model with FieldPanel
. No need to write data migrations.
It also allows developers to add additional data into through models.
from django-modelcluster.
A through model is a requirement when you want to record additional information about the relationship.
I need to record a rich text description per many-to-many relationship, the (source, target) tuples must be unique, and I need to put minimum and maximum limits on the relationship (each source needs to have at least 1, at most 8 such relationships recorded).
I guess I can achieve this with an inline panel and a full-blown model with a unique_together
constraint, and some way to limit the available choices based on what's already present when editing? The latter would become rather hackish, I fear.
from django-modelcluster.
The syntax for ParentalManyToManyField(to=FooModel, through=BarToFoo)
seems more Django-like rather than only defining the intermediary model and setting a ParentalKey as seen in the Wagtail examples.
Also it looks like Django just merged better support for updating m2m relationships that have an intermediary model as well: django/django#8981. So for the example in the ticket description you will be able to use bar_page.asset_programs.add(foo)
even with a through model!
from django-modelcluster.
Related Issues (20)
- Copy fails for a Wagtail page with no tags HOT 7
- Multi table inheritance - ptr_id fields not being restored
- Using TaggedItem in ClusterTaggableManager causing AttributeError HOT 1
- Unable to `prefetch_related` on `ClusterTaggableManager` HOT 1
- When I Modify Elements via Admin Panel , Its not getting Saved HOT 1
- Add support for Django 3.2 HOT 3
- ClusterForm.as_p should return a safe string
- test suite fails with django-taggit >= 2.0.0 HOT 1
- Nested ClusterableModel relations are not copied HOT 1
- AttributeError when a ParentalKey related manager is used as the queryset for a ModelChoiceField HOT 3
- Wagtail 3.0 support planned? HOT 2
- GenericForeignKey
- Django 5.0 support HOT 1
- Filtering on related manager when using `prefetch_related` with explicit `queryset` on a ClusterableModel returns wrong results HOT 1
- Field with the same name as a lookup in `FILTER_EXPRESSION_TOKENS` causes crash when filtering with implicit `exact`
- test_formfield_callback failing with Django 4.2 HOT 1
- Docs: please provide an example of a through model with a ParentalManyToManyField
- Unhelpful messaging when model attribute name shadows child relation
- Preview breaks on latest 6.2 version HOT 3
- BaseChildFormSet doesn't caught IntegrityError for unique together using UniqueConstraint
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from django-modelcluster.