繁体   English   中英

交互式下拉列表 django 带有添加新条目的选项

[英]Interactive drop down list django with option to add new entry

我对 django 比较陌生。 我制作了一个简单的应用程序,使用户能够记录有关运行(活动)的详细信息。 用户使用 django ModelForm 输入数据,例如:距离、时间、路线名称、运行日期等。

我有一个 ModelForm,它使登录的用户能够将 Activity 添加到 model 数据库。

我如何获得表格以添加 model 数据库中已经存在的所有路线的下拉列表,如果人员正在输入有关他们以前没有运行过的路线的数据,则添加新路线。?

class Person(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    fName = models.CharField(max_length =100)
    lName = models.CharField(max_length =100)
    weight = models.FloatField()
    sex = models.CharField(max_length=10)

    def __str__(self):
        return self.lName

class Activity(models.Model):
    person = models.ForeignKey(Person, on_delete=models.CASCADE)
    length = models.FloatField()
    runTime = models.DurationField()
    route = models.CharField(max_length=100)
    ave = models.DurationField()
    dateRun = models.DateField()
    marathon = models.DurationField()

    def __str__(self):
        return self.route ```

我会在 models.py 中添加 model Route:

class Person(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    fName = models.CharField(max_length=100)
    lName = models.CharField(max_length=100)
    weight = models.FloatField()
    sex = models.CharField(max_length=10)

    def __str__(self):
        return self.lName


class Route(model.model):
    person = models.ForeignKey(Person, on_delete=models.CASCADE)
    length = models.FloatField()
    route = models.CharField(max_length=100)
    
    
class Activity(models.Model):
    person = models.ForeignKey(Person, on_delete=models.CASCADE)
    runTime = models.DurationField()
    route =  models.ForeignKey(Route, on_delete=models.CASCADE)
    ave = models.DurationField()
    dateRun = models.DateField()
    marathon = models.DurationField()

    def __str__(self):
        return self.route

当人想要添加活动时,他将拥有他之前输入的所有路线。 该解决方案需要在模型表单中进行额外的工作,并且需要另一种表单来添加新路线。 我认为 ActivityForm 应该是这样的:

class ActivityForm(forms.ModelForm):
    class Meta:
        model = Activity
        fields = '__all__'
        widgets = {'person': forms.HiddenInput}

并在views.py中初始化它:

form = ActivityForm(initial={'person': request.user.id})
form.field['route'].queryset = Route.objects.filter(person=request.user)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM