How to use dynamic foreignkey in Django? How to use dynamic foreignkey in Django? python python

How to use dynamic foreignkey in Django?


Here is how I do it:

from django.contrib.contenttypes.models import ContentTypefrom django.contrib.contenttypes import fieldsclass Photo(models.Model):    picture = models.ImageField(null=True, upload_to='./images/')    caption = models.CharField(_("Optional caption"),max_length=100,null=True, blank=True)    content_type = models.ForeignKey(ContentType)    object_id = models.PositiveIntegerField()    content_object = fields.GenericForeignKey('content_type', 'object_id')class Article(models.Model):    ....    images     = fields.GenericRelation(Photo)

You would add something like

    content_type = models.ForeignKey(ContentType)    object_id = models.PositiveIntegerField()    content_object = fields.GenericForeignKey('content_type', 'object_id')

to Favesand

    fields.GenericRelation(Faves)

to Article and Cast

contenttypes docs


Here's an approach. (Note that the models are singular, Django automatically pluralizes for you.)

class Article(models.Model):    title = models.CharField(max_length=100)    body = models.TextField()class Cast(models.Model):    title = models.CharField(max_length=100)    body = models.TextField()FAVE_CHOICES = (     ('A','Article'),    ('C','Cast'),)class Fave(models.Model):    type_of_fave = models.CharField( max_length=1, choices=FAVE_CHOICES )    cast = models.ForeignKey(Casts,null=True)    article= models.ForeigKey(Articles,null=True)    user = models.ForeignKey(User,unique=True)

This rarely presents profound problems. It may require some clever class methods, depending on your use cases.