AttributeError: у объекта 'File' нет атрибута 'model' - PullRequest
0 голосов
/ 30 апреля 2018

У меня есть следующая настройка, в которой мои классы Модели выглядят следующим образом

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)

но после миграции я получаю следующую ошибку enter image description here

Я пробовал несколько решений, которые я получил после поиска в Google, но ошибка все еще там. Любая помощь приветствуется.

Ответы [ 4 ]

0 голосов
/ 30 октября 2018

Я столкнулся с подобной проблемой. Как и вы, я регистрировал Model, а не admin модель.

Попробуйте это:

 admin.site.register(File, FileInLine)
0 голосов
/ 30 апреля 2018

admin.site.register используется для регистрации класса модели в классе администратора.

Это подпись функции: AdminSite.register(model_or_iterable, admin_class=None, **options)

В вас admin.py вы передаете модель файла вместо своего пользовательского класса администратора: 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)
0 голосов
/ 30 апреля 2018

Чтобы зарегистрировать несколько моделей одновременно, вам нужно передать их как итеративные:

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

вместо

admin.site.register(Advertisement, File)
0 голосов
/ 30 апреля 2018

Используйте admin.site.register(Advertisement, FileInline) вместо admin.site.register(Advertisement, File)

...