Как использовать динамический foreignkey в Django?

Я думаю, что важным принципом здесь является то, что вы последовательны. Используйте префикс «_» или «m», если это то, что вам нравится делать, и это согласуется с остальным кодом, с которым вы работаете. Что бы вы ни выбрали, придерживайтесь этого и будьте последовательны.

35
задан Lutz Prechelt 20 April 2016 в 17:06
поделиться

2 ответа

Вот как я это делаю:

from django.contrib.contenttypes.models import ContentType
from django.contrib.contenttypes import fields


class 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)

Вы бы добавили что-то вроде

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

в Faves и

    fields.GenericRelation(Faves)

в Article and Cast

contenttypes docs

46
ответ дан 27 November 2019 в 07:04
поделиться

Вот подход. (Обратите внимание, что модели используются в единственном числе, Django автоматически использует множественное число.)

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)

Это редко вызывает серьезные проблемы. В зависимости от ваших сценариев использования может потребоваться несколько умных методов класса.

18
ответ дан 27 November 2019 в 07:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: