【问题标题】:AttributeError: 'File' object has no attribute 'model'AttributeError:“文件”对象没有属性“模型”
【发布时间】:2018-04-30 10:23:54
【问题描述】:

我有以下设置,其中我的模型类如下所示

from django.db import models
from User.models import UserProfile


class Advertisement(models.Model):
    owner = models.ForeignKey(UserProfile, related_name='advertisements', on_delete=models.CASCADE)
    title = models.CharField(max_length=500, blank=False, default='')
    location = models.CharField(max_length=300, blank=False, default='')
    rent = models.IntegerField(blank=False)
    status = models.CharField(max_length=100, blank=False)
    no_of_bedrooms = models.IntegerField(blank=False)
    no_of_bathrooms = models.IntegerField(blank=False)
    posted_by = models.CharField(max_length=100, blank=True)
    date_ad_posted = models.DateTimeField(null=True, blank=True)
    contact = models.CharField(max_length=13, blank=False)
    description = models.CharField(max_length=1000, blank=False)
    security_deposit = models.IntegerField(default=0, blank=False)

    def save(self, *args, **kwargs):
        super(Advertisement, self).save(*args, **kwargs)


class File(models.Model):
    Ad = models.ForeignKey(Advertisement, related_name='ad-photo', on_delete=models.CASCADE)
    file = models.FileField(blank=False, null=False)
    remark = models.CharField(max_length=20)
    timestamp = models.DateTimeField(auto_now_add=True)

我的序列化程序如下所示

class AdvertisementSerializer(serializers.HyperlinkedModelSerializer):
    owner = serializers.ReadOnlyField(source='owner.email')

    class Meta:
        model = Advertisement
        fields = ('id', 'owner', 'title', 'location', 'rent', 'status', 'no_of_bedrooms', 'no_of_bathrooms',
                  'date_ad_posted', 'posted_by', 'contact', 'description')
        kwargs = {
            'url': {'view_name': 'advertisement-detail'}
        }


class FileSerializer(serializers.ModelSerializer):
    class Meta:
        model = File
        fields = ('Ad', 'file', 'remark', 'timestamp')

我正在通过以下方式在 admin.py 中注册我的模型

from django.contrib import admin
from .models import Advertisement, AdContract, File


class FileInline(admin.TabularInline):
    model = File


class PropertyAdmin(admin.ModelAdmin):
    inlines = [FileInline, ]


admin.site.register(Advertisement, File)
admin.site.register(AdContract)

但是在进行迁移时,我收到以下错误

我在谷歌搜索后尝试了一些解决方案,但错误仍然存​​在。任何帮助表示赞赏。

【问题讨论】:

    标签: django django-models django-rest-framework django-views


    【解决方案1】:

    要一次注册多个模型,您需要将它们作为可迭代对象传递:

    admin.site.register([Advertisement, File])
    

    而不是

    admin.site.register(Advertisement, File)
    

    【讨论】:

      【解决方案2】:

      admin.site.register 用于向管理类注册模型类。

      这是它的函数签名: AdminSite.register(model_or_iterable, admin_class=None, **options)

      admin.py 中,您传递的是 File 模型而不是您的自定义管理类:admin.site.register(Advertisement, File)

      试试这个:

      from django.contrib import admin
      from .models import Advertisement, AdContract, File
      
      
      class FileInline(admin.TabularInline):
          model = File
      
      
      class PropertyAdmin(admin.ModelAdmin):
          inlines = [FileInline, ]
      
      
      admin.site.register(File, FileInline)
      admin.site.register(AdContract)
      

      【讨论】:

        【解决方案3】:

        我遇到了类似的问题。和你一样,我注册的是 Model,而不是 admin 模型。

        试试这个:

         admin.site.register(File, FileInLine)
        

        【讨论】:

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