django用户创建的下拉列表项

时间:2019-03-14 03:54:42

标签: django django-models

我希望用户能够从下拉菜单中创建项目。我对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})

image

1 个答案:

答案 0 :(得分:1)

您似乎正在处理现有示例代码,其中LIST_CHOICES被定义为静态且不可更改的值。 (PEP8标准将所有大写字母中的变量声明为永远不变的东西)

您首先需要为部门创建一个新模型,并使用ManyToMany关系将其与Post and 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/

它涵盖了许多您需要输入的基本知识。