5👍
You can use %(class)s
or %(app_label)s
class HasSystemMessage(models.Model):
class Meta:
abstract = True
messages = models.ManyToManyField(SystemMessage, related_name=%(app_label)s_%(class)s_related)
From Django docs
Be careful with related_name and related_query_name¶ If you are using
related_name or related_query_name on a ForeignKey or ManyToManyField,
you must always specify a unique reverse name and query name for the
field. This would normally cause a problem in abstract base classes,
since the fields on this class are included into each of the child
classes, with exactly the same values for the attributes (including
related_name and related_query_name) each time.To work around this problem, when you are using related_name or
related_query_name in an abstract base class (only), part of the value
should contain ‘%(app_label)s’ and ‘%(class)s’.‘%(class)s’ is replaced by the lower-cased name of the child class
that the field is used in. ‘%(app_label)s’ is replaced by the
lower-cased name of the app the child class is contained within. Each
installed application name must be unique and the model class names
within each app must also be unique, therefore the resulting name will
end up being different.
0👍
You Just need to put a string in this attribute which specifies the name of the reverse relation from the SystemMessage
.Also read in Django Docs
Try this:
class HasSystemMessage(models.Model):
class Meta:
abstract = True
messages = models.ManyToManyField(SystemMessage, related_name='system_message')