python - django如何建立指向自身的外键
高洛峰
高洛峰 2017-04-17 13:32:12
[Python讨论组]

如题,试着用django系统做一个微博系统,在建立user model时使用的是OneToOne的方式扩展django.contrib.auth.admin的User,但出了点问题,想实现微博上关注和粉丝的功能,这样写报错

class weiboUser(models.Model):
    user = models.OneToOneField(User)
    fans = models.ForeignKey(weiboUser,related_name="fans")
    focus  = models.ForeignKey(weiboUser,related_name="focus")

所以想问一下如何在model下建立指向自身model的外键?谢谢。

补充,参照了官方文档,做了以下修改,虽然不报错了,但无法同步数据库,求高人继续指导。

class weiboUser(models.Model):
    user = models.OneToOneField(User)
    fans = models.ManyToManyField('self',symmetrical=False)
    focus  = models.ManyToManyField('self',symmetrical=False)
高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

全部回复(2)
伊谢尔伦

目测楼主不懂数据库

ringa_lee

需要建立一个抽象类为父类,用代码说话:

class AbstractNavi(models.Model):  
    parent = models.ForeignKey('self',blank=True, null=True, related_name='child')  
    class Meta:  
        abstract = True  
    
class Navi(AbstractNavi):  
    """ 
    Navi has four type: goods, news, page and custom 
    """  
    STYLE_CHOICES = (  
        ('goods', 'goods'),  
        ('news', 'news'),  
        ('page', 'page'),  
        ('custom', 'custom'),  
    )  
    name = models.SlugField()  
    #parent = models.ForeignKey('self', null=True, blank=True, related_name='child')  
    style = models.SlugField(choices=STYLE_CHOICES)  
    url = models.CharField(max_length=100, default='#')  
    sort = models.IntegerField(default=1)  
    is_display = models.BooleanField(default=True)  
    def __unicode__(self):  
        return self.name  
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号