【问题标题】:AttributeError: module 'student.models' has no attribute 'ManyToManyField'AttributeError:模块“student.models”没有属性“ManyToManyField”
【发布时间】:2021-08-12 20:06:59
【问题描述】:

我正在使用以下型号:

models.py

class Student(models.Model):
    name    =   models.CharField(max_length = 200)
    country =   models.ManyToManyField(Country, null = True,blank=True)

class Country(models.Model):
    title   =   models.CharField(max_length = 100, null = True)
    
    def __str__(self):
        return self.title

admin.py

@admin.register(models.Student)
class StudentAdmin(admin.ModelAdmin):
    formfield_overrides = {
        models.ManyToManyField: {'widget': CheckboxSelectMultiple},
    } 

我收到此错误:

AttributeError: module 'student.models' has no attribute 'ManyToManyField'

【问题讨论】:

    标签: django django-models django-admin


    【解决方案1】:

    你导入了错误的models模块,而不是from student import models,你应该导入from django.db import models

    另一个问题是您在定义之前引用了Country。因此,您应该使用字符串文字来引用稍后定义的模型:

    # no student.models
    from django.db import models
    
    class Student(models.Model):
        name = models.CharField(max_length=200)
        #               use a string literal ↓
        country = models.ManyToManyField('Country', null=True, blank=True)
    
    class Country(models.Model):
        title = models.CharField(max_length=100, null=True)
        
        def __str__(self):
            return self.title

    【讨论】:

      【解决方案2】:

      您似乎正在尝试使用来自student.modelsmodels.ManyToManyField,而实际上应该使用django.db.models

      尝试将此导入添加到文件顶部:

      from django.db import models
      

      如果名称与您的student.models 冲突,您可以将其重命名为:

      from django.db import models as django_models
      
      # then to use you would need to change your code to this:
      django_models.ManyToManyField()
      

      【讨论】:

        猜你喜欢
        • 2015-11-10
        • 2018-04-14
        • 2019-02-18
        • 1970-01-01
        • 2020-01-01
        • 2019-07-20
        • 2021-11-05
        • 2021-11-04
        相关资源
        最近更新 更多