首页 > 解决方案 > 带有单选按钮的选择字段未出现在管理面板上

问题描述

这是我的乘客模型。当我转到我的默认 django 模型时,我可以看到每个字段,但看不到选择字段。我想要选择患者性别的选项。另外,我希望以我的形式出现。但是,首先在我的管理面板中没有字段名称性别。什么问题??

class Passenger(models.Model):
    # book_id = models.OneToOneField(Booking, on_delete = models.CASCADE, primary_key = True)
    First_name = models.CharField(max_length=200, unique=True)
    Last_name = models.CharField(max_length=200, unique=True)
    Nationality = models.CharField(max_length=200, unique=True)
    Passport_No = models.CharField(max_length=200, unique=True)
    Passport_Exp_Date = models.DateField(blank=False)
    Contact_Number = models.CharField(max_length=200, unique=True)
    Email = models.EmailField(max_length=200, unique=True)
    Customer_id = models.CharField(max_length=50)
    CHOICES = [('M', 'Male'), ('F', 'Female'), ('O', 'Others')]
    Gender = forms.ChoiceField(label='Gender', widget= forms.RadioSelect(choices=CHOICES))

标签: pythonhtmldjangourlview

解决方案


您需要创建一个ModelForm并使用它来覆盖ModelAdmin.form以在管理站点中显示单选按钮,如下所示:

# models.py
class Passenger(models.Model):
   # rest of the fields
   CHOICES = [('M', 'Male'), ('F', 'Female'), ('O', 'Others')]
   Gender = models.CharField(max_length=50,choices=CHOICES)  # field name should be gender(all lowercase)

# admin.py
class PassengerForm(forms.ModelForm):
    class Meta:
        model = Passenger
        fields = '__all__'

    Gender = froms.ChoiceField(
        label = 'Gender',
        choices = [('M', 'Male'), ('F', 'Female'), ('O', 'Others')]
        initial = 'M',
        widget = forms.RadioSelect,
    )

class PassengerAdmin(admin.ModelAdmin):
     form = PassengerForm
 
admin.site.register(Passenger, PassengerAdmin)

仅供参考:根据PEP-8标准,属性名称应该是snake_case.

更新

尝试这样使用radio_fields

class PassengerAdmin(admin.ModelAdmin):
     radio_fields = {"Gender": admin.VERTICAL}
 
admin.site.register(Passenger, PassengerAdmin)

推荐阅读