【问题标题】:Why am I getting core.Model.none?为什么我得到 core.Model.none?
【发布时间】:2019-03-28 23:02:27
【问题描述】:

我正在开发一个基于 django 的后端。

我有一个子导师模型。这个模型将有一个 list 与它相关的 names。所以,我制作了一个名为List的模型。他们都有多对多关系。现在,我制作了另一个名为 names 的模型。这与 List 具有 ManytoMany 关系。该列表将有许多名称。每个子导师都有一个列表。

编码后,当我尝试在管理控制台的列表中添加一个值时,我得到 core.Name.none 而不是我的子导师列表中的名称。

我做错了什么?

模型代码:-

class Names(models.Model):
    user = models.OneToOneField(User,on_delete=models.CASCADE,blank=True,null=True)
    name = models.CharField(max_length=50)

    def __str__(self):
        return self.name

class SAccepted_list(models.Model):
    saccepted_name = models.ManyToManyField(Names,blank =True, related_name='saccepted_name')

    def __str__(self):
        return str(self.saccepted_name)

class SPending_list(models.Model):
    spending_name = models.ManyToManyField(Names,blank =True, related_name='spending_name')

    def __str__(self):
        return str(self.spending_name)


class SRejected_list(models.Model):
    srejected_name = models.ManyToManyField(Names,blank =True, related_name='srejected_name')

    def __str__(self):
        return str(self.srejected_name)


class SubMentor(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE, primary_key=True)
    mentee_pref_count = models.IntegerField(default=3, verbose_name='Preferred mentee count')
    rating = GenericRelation(Rating, related_query_name='Submentor')
    skills = models.ManyToManyField(Skill, blank=True, related_name='subskills')
    courses = models.ManyToManyField(Course, blank=True, related_name='subcourses')
    projects = models.ManyToManyField(Project, blank=True, related_name='subprojects')
    saccepted_list = models.ManyToManyField(SAccepted_list,blank=True,related_name='saccepted_list')
    spending_list = models.ManyToManyField(SPending_list, blank=True,related_name='spending_list')
    srejected_list = models.ManyToManyField(SRejected_list, blank=True,related_name='srejected_list')

    def __str__(self):
        return self.user.get_full_name()

    def get_mentee_count(self, *args, **kwargs):
        if self.trainees.exists():
            return self.trainees.count()
        else:
            return 0

class Accepted_list(models.Model):
    accepted_name = models.ManyToManyField(Names,blank =True, related_name='accepted_name')
    # saccepted_name = models.ManyToManyField(Names,blank =True, related_name='saccepted_name')

    def __str__(self):
        return str(self.accepted_name)

class Pending_list(models.Model):
    pending_name = models.ManyToManyField(Names,blank =True, related_name='pending_name')
    # spending_name = models.ManyToManyField(Names,blank =True, related_name='spending_name')

    def __str__(self):
        return str(self.pending_name)


class Rejected_list(models.Model):
    rejected_name = models.ManyToManyField(Names,blank =True, related_name='rejected_name')
    # srejected_name = models.ManyToManyField(Names,blank =True, related_name='srejected_name')

    def __str__(self):
        return str(self.rejected_name)



class Mentor(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE, primary_key=True)
    score = models.FloatField(default=0, blank=True, null=True)
    mentee_pref_count = models.IntegerField(default=5, verbose_name='Preferred menteee count')
    rating = GenericRelation(Rating, related_query_name='mentor')
    skills = models.ManyToManyField(Skill, blank=True, related_name='skills')
    accepted_list = models.ManyToManyField(Accepted_list,blank=True,related_name='accepted_list')
    pending_list = models.ManyToManyField(Pending_list, blank=True,related_name='pending_list')
    rejected_list = models.ManyToManyField(Rejected_list, blank=True,related_name='rejected_list')

    def __str__(self):
        return self.user.get_full_name()

    def get_mentee_count(self, *args, **kwargs):
        if self.trainees.exists():
            return self.trainees.count()
        else:
            return 0

我直接通过管理控制台添加名称的图片:-

谢谢。

【问题讨论】:

  • 这个设置真的没有任何意义。您获得该值是因为您的支出列表 m2m 字段指向 SPending_list 模型,并且该模型上唯一的东西是 another m2m 到名称; SPending_list 上的__str__ 方法使用该 m2m 生成字符串以在选择框中显示,但没有选择任何内容,因此它所能做的就是打印“无”。但实际上,拥有一个指向另一个 m2m 的 m2m 绝对不是您想要做的。
  • 哦,那我该怎么办?我刚刚开始学习 django,感谢您的帮助。 @丹尼尔罗斯曼

标签: python django model backend web-development-server


【解决方案1】:

好的,我解决了我的问题。我首先使用 m2m,然后使用另一个来制作列表是错误的。 相反,我只使用了 1 m2m 与 Lists 的关系,然后将它们的属性设为 charfield。现在它可以正常工作了。

谢谢:)

【讨论】:

    猜你喜欢
    • 2019-12-27
    • 2021-08-04
    • 2021-03-05
    • 2021-08-27
    • 2021-10-23
    • 2015-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多