使用自然键的Django序列化:同一mod的外键

2024-09-30 03:25:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个RelationType模型,它本身有一个外键:

class TypeManager(models.Manager):
    def get_by_natural_key(self, slug):
        return self.get(slug=slug)

class RelationType(models.Model):
    name = models.CharField(_(u"Name"), max_length=100)
    slug = models.SlugField(_(u"Slug"), max_length=100, unique=True)
    inverse_relation = models.ForeignKey(
        'RelationType', verbose_name=_(u"Inverse relation"),        
        blank=True, null=True)
    objects = TypeManager()

    def natural_key(self):
        return (self.slug, )

一旦序列化,它将生成这种JSON:

^{pr2}$

这在逻辑上不能由Django加载:

DeserializationError: Problem installing fixture 'myfixture.json': RelationType matching query does not exist.

有没有办法明智地处理这个问题?


Tags: keynameselftruegetreturnmodelsdef
1条回答
网友
1楼 · 发布于 2024-09-30 03:25:32

我想出了一个非常难看的解决方案(如果有人能想出更好的解决方案,我会很高兴的)。在

我首先生成夹具:

./manage.py dumpdata  indent 4  natural-primary  natural-foreign \ 
    myapp.relationtype > fixtures/initial_relationtypes.json

然后我使用一些UNIX魔术来消除“自我”关系:

^{pr2}$

出于对UNIX魔术的好奇,我用另一个任意字符翻译新行字符,因为sed不能执行多行正则表达式。在

然后我可以先用norel夹具加载两个fixture:

./manage.py loaddata fixtures/initial_relation_type-norel.json
./manage.py loaddata fixtures/initial_relation_type.json

相关问题 更多 >

    热门问题