Django:模型外键和选择框小部件

0 投票
1 回答
2372 浏览
提问于 2025-04-16 11:23

我有两个模型,分别是 Worker(工人)和 Position(职位)。当我添加一个新工人时,应该有一个下拉框,里面列出 Position 模型中的所有职位。

我尝试使用 Select 组件,但 Django 报错说 没有这样的属性

模型


# Position model
class Position(models.Model):
    p_name   = models.CharField(max_length = 40, unique = True, verbose_name = 'Position')
    p_salary = models.IntegerField(max_length = 11, verbose_name = 'Salary')

    fields = ('p_name', 'p_salary')


# Worker model
class Worker(models.Model):
    w_name     = models.CharField(max_length = 40, verbose_name = 'Name')
    w_lastname = models.CharField(max_length = 40, verbose_name = 'Lastname')
    w_position = models.ForeignKey(to = Position, to_field = 'p_name', verbose_name = 'Position')
    w_dept     = models.ForeignKey(to = Department, to_field = 'd_name' verbose_name = 'Department')

表单


class WorkerForm(ModelForm):
    class Meta:
        model = Worker

        widgets = {
            'w_name'    : TextInput(attrs = {'class': 'e name'}),
            'w_lastame' : TextInput(attrs = {'class': 'e lastname'}),
            'w_position': Select(attrs = {'class': 'e position'}),
            'w_dept'    : Select(attrs = {'class': 'e department'}),
        }

在 admin.py 中的定义


class WorkerAdmin(admin.ModelAdmin):
    form = WorkerForm

list_display = ('w_name', 'w_lastname', 'w_position', 'w_dept')

出现了什么问题?如何根据外键让下拉框显示出来?

Sultan

1 个回答

1

你可以试着在表单里面重新声明这个字段(记得用和模型里一样的名字),然后在里面设置小部件和属性吗?

撰写回答