【问题标题】:How do I delete a field from my Django ModelForm?如何从我的 Django ModelForm 中删除一个字段?
【发布时间】:2017-12-16 20:04:34
【问题描述】:

我正在尝试隐藏和删除两个字段,使其不显示在我使用 ModelForm 在 Django 管理页面中创建的表单中。 我查看了说我应该使用“排除”元字段的答案,但我不知道为什么它在我的情况下不起作用。 这是我的代码:

models.py:

class Activity(models.Model):
    type = models.CharField(max_length=50, default="")
    title = models.CharField(max_length=200, default="")
    description = models.CharField(max_length=500)
    owner = models.ForeignKey(User, related_name="owner")
    college = models.CharField(max_length=200)
    location = models.CharField(max_length=200)
    room = models.CharField(max_length=200)
    startDate = models.DateTimeField(null=True, blank=True)
    endDate = models.DateTimeField(null=True, blank=True)
    attendee = models.ManyToManyField(Attendee, related_name="attendees",null=True, blank=True)
    volunteer = models.ManyToManyField(Volunteer, related_name="volunteers",null=True, blank=True)

我正在尝试从 Django 管理表单中的显示中排除“参加者和志愿者”字段。

在 admin.py 我有:

from django.contrib import admin
from django import forms
from KSUvity.models import Activity


class ActivityForm(forms.ModelForm):

    class Meta:
        model = Activity
        exclude = ['attendee', 'volunteer',]

class ActivityAdmin(admin.ModelAdmin):
    exclude = ['attendee', 'volunteer',]
    form = ActivityForm

admin.site.register(Activity, ActivityAdmin)

【问题讨论】:

    标签: python django


    【解决方案1】:

    您必须在您的应用中创建一个 admin.py 文件并注册您的模型 关注instuctions 请参阅下面的示例

    from django import forms
    from django.contrib import admin
    from myapp.models import Person
    
    class PersonForm(forms.ModelForm):
    
        class Meta:
            model = Person
            exclude = ['name']
    
    class PersonAdmin(admin.ModelAdmin):
        exclude = ['age']
        form = PersonForm
    
    admin.site.register(Person, PersonAdmin)
    

    【讨论】:

    • 在我的问题中检查我更新的代码。我遵循了完全相同的步骤,但没有任何改变,并且字段仍在显示。
    【解决方案2】:

    您可以在一个类中使用任一字段或排除。

    在您的应用管理字段中添加此代码。

    app_name/admin.py

    from django.contrib import admin
    
    
    class ActivityAdmin(admin.ModelAdmin):
        exclude = ('attendee', 'volunteer',)
    

    【讨论】:

      【解决方案3】:

      您必须使用 ModelAdmin 选项从 Django 管理中的表单中排除字段,ModelAdmin.excludeModelAdmin.fields。下面是一个例子:

      class ActivityAdmin(admin.ModelAdmin):
          exclude = ('attendee', 'volunteer', )
      

      要使其工作,您可以像这样注册模型:

      admin.site.register(Activity, ActivityAdmin)
      

      您将此代码添加到admin.py 文件中。

      【讨论】:

      • 我在 admin.py 中添加了这段代码,但没有任何改变,这些字段仍然显示在表单中。
      • 为了让它工作,你需要像这样admin.site.register(Activity, ActivityAdmin)注册模型。但我看到你已经开始工作了。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-01-31
      • 2018-11-08
      • 2020-02-04
      • 2012-10-24
      • 1970-01-01
      • 2018-07-17
      • 2011-08-08
      相关资源
      最近更新 更多