簡體   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