生成django admin和Foreignkey错误

生成django admin和Foreignkey错误

这是我的模型。py:

class MireilleUser(models.Model):
    created = models.DateTimeField( blank=True, editable=False,default=timezone.now)
    modified = models.DateTimeField( blank=True,default=timezone.now)
    uuid = models.CharField(blank=True,  max_length=48,default='')
    firebase_id = models.CharField(max_length=256)

    def save(self, *args, **kwargs):
        """ On save, update timestamps """
        if not self.id:
            self.created = timezone.now()
        self.modified = timezone.now()
        if not self.uuid:
            self.uuid = str(uuid.uuid4().hex) + str(random.randint(1000, 9999))
        return super(MireilleUser, self).save(*args, **kwargs)
    
class MireilleAppSubscription(models.Model):
    ACTIVE = 'AC'
    SOPHOMORE = 'SO'
    JUNIOR = 'JR'
    SENIOR = 'SR'
    GRADUATE = 'GR'
    STATUS_VALUE = [
        (ACTIVE, 'Active'),
        ('SO', 'Sophomore'),
        ('JR', 'Junior'),
        ('SR', 'Senior'),
        ('GR', 'Graduate'),
    ]
    STRIPE = 'ST'
    GOOGLE = 'GO'
    APPLE = 'AP'
    PLATFORM_VALUE = [
        (STRIPE, 'STRIPE'),
        (GOOGLE, 'GOOGLE'),
        (APPLE, 'APPLE'),
    ]
    created = models.DateTimeField( blank=True, editable=False,default=timezone.now)
    modified = models.DateTimeField( blank=True,default=timezone.now)
    uuid = models.CharField(blank=True,  max_length=48,default='')
    mireille_user = models.ForeignKey(MireilleUser,on_delete=models.PROTECT)
    date_begin = models.DateTimeField(blank=True, editable=True, default=timezone.now)
    stripe_client_id = models.CharField(blank=True,  max_length=48,default='')
    platform = models.CharField(blank=True,  max_length=2,choices=PLATFORM_VALUE)
    expected_end_time = models.DateTimeField(blank=True, editable=True, default=(timezone.now()+timezone.timedelta(days=8)))
    is_free = models.BooleanField(default=False)
    is_vip = models.BooleanField(default=False)
    promo_code = models.CharField(blank=True, max_length=128, default='')
    status = models.CharField(max_length=2,
        choices=STATUS_VALUE,
        default=ACTIVE)

    def save(self, *args, **kwargs):
        """ On save, update timestamps """
        if not self.id:
            self.created = timezone.now()
        self.modified = timezone.now()
        if not self.uuid:
            self.uuid = str(uuid.uuid4().hex) + str(random.randint(1000, 9999))
        return super(MireilleAppSubscription, self).save(*args, **kwargs)

这是我的admin.py

class MireilleUser_Admin(admin.ModelAdmin):
    list_display = [field.name for field in MireilleUser._meta.get_fields()]
    search_fields = [field.name for field in MireilleUser._meta.get_fields()]
    actions = [
        export_as_csv_action(
            "CSV Export",
            fields=[field.name for field in MireilleUser._meta.get_fields()],
        )
    ]


class MireilleAppSubscription_Admin(admin.ModelAdmin):
    list_display = [field.name for field in MireilleAppSubscription._meta.get_fields()]
    search_fields = [field.name for field in MireilleAppSubscription._meta.get_fields()]
    actions = [
        export_as_csv_action(
            "CSV Export",
            fields=[field.name for field in MireilleAppSubscription._meta.get_fields()],
        )
    admin.site.register(MireilleUser, MireilleUser_Admin)
    admin.site.register(MireilleAppSubscription, MireilleAppSubscription_Admin)

但是在管理员中,当我单击管理员上的Mireille User时,我有:

AttributeError at /admin/AppUser/mireilleuser/
Unable to lookup 'mireilleappsubscription' on MireilleUser or MireilleUser_Admin

我不明白为什么,因为外键在MireilleUser的MireilleAppSubscription中,而不在MireilleAppSubscription的MireilleUser中

我怀疑我使用meta字段生成管理员的方式是否存在。

致谢

最佳答案:

1 个答案:

答案 0 :(得分:2)

这是因为Django创建了一个名为 mireilleappsubscription reverse relation--(Django What is reverse relationship?),而不是 actual字段

我建议通过分别指定每个字段来使用 list_display  search_fields

class MireilleUser_Admin(admin.ModelAdmin):
    list_display = ["created", "modified", "ect"]
    search_fields = ["created", "modified", "etc"]

OR

如果您只想忽略该错误,请从列表中将 mireilleappsubscription 字段删除为

fields = [field.name for field in MireilleUser._meta.get_fields()]
fields.remove("mireilleappsubscription")


class MireilleUser_Admin(admin.ModelAdmin):
    list_display = fields
    search_fields = fields
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值