首页 > 解决方案 > 有没有办法在运行时为模型的相关字段动态选择一个值?

问题描述

我想实现一个功能,我需要选择一个 django 模型(例如从下拉列表中),选择一个后,该模型的所有对象都会显示出来。

class Thread(models.Model):
    sender = models.(???) # This need to be a field that can store a different model on a run time.
    receiver = models.(???) # same here.

有什么方法可以让我动态地首先选择模型,然后选择该列表中的一个对象。我已经在 odoo 中看到了这个功能。但是 Django 中有什么东西吗?

标签: pythondjango

解决方案


您可以使用多对多字段以及来自另一个模型的“学生”和“教师”的多个可用选项。

    class UserRole(models.Model):
        STUDENT = 'STUDENT'
        TEACHER = 'TEACHER'
    
        ROLE_CHOICES = (
           (STUDENT, 'student'),
           (TEACHER, 'teacher'),
        )
        role_name = models.CharField(max_length=255, choices=ROLE_CHOICES)

        def __str__(self):
            return "{}".format(self.role_name)

    class User(AbstractUser):
        username = models.CharField(max_length=50, unique=True)
        email = models.EmailField(_('email address'))
        role = models.ManyToManyField(UserRole)

    Class Thread(models.Model):
        sender = models.OneToOneField(User, on_delete=models.CASCADE)
        receiver = models.OneToOneField(User, on_delete=models.CASCADE)

这样,您只能将可用角色放在 Thread 的发送者和接收者字段中。


推荐阅读