Django 1.11多对多未出现在django admin中

时间:2018-07-30 17:14:01

标签: django python-3.x

嗨,我有一个django通知模型,它具有多对多关系,但是django admin中什么都没出现(所有字段都没有出现)

class Notification(models.Model):
    """send notification model"""

    title = models.CharField(max_length=200)
    text = models.TextField(null=True, blank=True)
    device = models.ManyToManyField(Device, null=True, blank=True)
    country = models.ManyToManyField(Country, null=True, blank=True)
    sent = models.BooleanField(default=False)

when i open django admin for this model and press add notification this is what happens (nothing appears)

国家和设备代码

class Device(models.Model):
    """Store device related to :model:`accounts.User`."""

    user = models.OneToOneField(User, related_name='device', on_delete=models.CASCADE)
    model = models.CharField(max_length=200, blank=True, null=True)
    player_id = models.CharField(max_length=200, blank=True, null=True)

    class Meta:
        verbose_name = 'Device'
        verbose_name_plural = 'Devices'

    def __str__(self):
        return self.model


class Country(models.Model):
    name = models.CharField(max_length=255)

    def __str__(self):
        return self.name

Admin.py

from django.contrib import admin

from .models import  Notification

admin.site.register(Notification)

编辑: 谢谢大家解决了所有问题 该问题是由设备模型中的某些条目引起的,该条目在model字段中没有None,因此存在正确显示它的问题。

2 个答案:

答案 0 :(得分:0)

根据https://code.djangoproject.com/ticket/2169

  

当某个类的字段未在管理界面中显示但   不能为空,就不可能添加新的。你得到一个神秘的   “请更正以下错误。”没有显示错误的消息。的   错误消息可能应该说出有关隐藏字段的内容。

现在ManyToManyFields不需要null = True,请尝试删除这些语句,看看是否有所改善。

此外,请尝试在admin.py中添加“国家/地区”和“设备”模型,以便管理员可以查看和显示它们。

答案 1 :(得分:0)

https://docs.djangoproject.com/en/1.11/ref/contrib/admin/#working-with-many-to-many-models

为admin.py中的多对多定义一个内联:

from django.contrib import admin

class DeviceInline(admin.TabularInline):
    model = Notification.device.through

class CountryInline(admin.TabularInline):
    model = Notification.country.through

class NotificationAdmin(admin.ModelAdmin):
    inlines = [
        DeviceInline, CountryInline
    ]
    exclude = ("device", "country")