首页 > 解决方案 > django 用户创建的下拉列表项

问题描述

我希望用户能够从下拉菜单中创建项目是可能的。我对 django 很陌生,因此感谢您的帮助。目前我只是保存他们想要添加的项目的标题,并有一些虚拟数据作为项目。

LIST_CHOICES = (
('green','GREEN'),
)

class Listing(models.Model):
    title = models.CharField(max_length=250)

    def get_absolute_url(self):
        return reverse('project-create')

有没有办法从列表模型中获取输入的标题并将其显示为带有 Post 的下拉项?

 class Post(models.Model):
    department = models.CharField(max_length=100, choices=LIST_CHOICES, default='green')
    date_posted = models.DateTimeField(default=timezone.now)
    author = models.ForeignKey(User, on_delete=models.CASCADE)


    def get_absolute_url(self):
        return reverse('project-detail', kwargs={'pk': self.pk})

图片

标签: djangodjango-models

解决方案


看起来您正在处理预先存在的示例代码,其中LIST_CHOICES定义为静态且不可更改的值。(PEP8 标准将所有大写的变量声明为永远不应该改变的东西)

您需要首先为部门创建一个新模型,并使用多对多关系将其与 Post 和 Listing 联系在一起:


class Listing(models.Model):
    title = models.CharField(max_length=250)

    def get_absolute_url(self):
        return reverse('project-create')



class Post(models.Model):
    department = models.ManyToManyField(
        to='Listing',
        blank=True
    )
    date_posted = models.DateTimeField(default=timezone.now)
    author = models.ForeignKey(User, on_delete=models.CASCADE)

    def get_absolute_url(self):
        return reverse('project-detail', kwargs={'pk': self.pk})


class Department(models.Model):
    listing = models.ForeignKey(Listing, on_delete=models.DO_NOTHING)
    post = models.ForeignKey(Post, on_delete=models.DO_NOTHING)
    name = models.CharField(max_length=140)

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

    class Meta:
        unique_together = ('listing',
                           'post',
                           'name')

Django 一开始只是很棘手,但一旦你明白了,一切都会变得更加顺畅。当我刚接触它时,作为初学者,我做的最有成效的事情就是阅读一本教科书,它会引导您了解如何从头到尾开发博客/cms。我会发布一个指向 PDF 的链接,但它是针对更旧版本的 Django 的。

尝试与本书一起编写代码: https ://books.agiliq.com/projects/djenofdjango/en/latest/

它涵盖了您需要通过键入它们来学习的许多基础知识。


推荐阅读