2017-06-05 13 views
1

私はDjangoでうまく表示されるモデルフォームを持っていますが、適切な情報を引き出すわけではありません。DjangoのModelForm - selectに適切なデータが設定されていませんか?

選択ドロップダウンが表示されますが、オプションが設定されていないため、理由を把握するのが苦労しています。

私のモデルは次のようになります。私のModelFormはこのようになります

class Mileage(models.Model): 
    start_location = models.ForeignKey(Location, on_delete=models.PROTECT, related_name='start_locations') 
    end_location = models.ForeignKey(Location, on_delete=models.PROTECT, related_name='end_locations') 
    miles = models.DecimalField(max_digits=8, decimal_places=2) 
    user_id = models.IntegerField(null=True) 

    def __str__(self): 
     return self.miles 

class Location(models.Model): 
    name = models.CharField(max_length=255) 
    address = models.CharField(max_length=255, null=True) 
    latitude = models.DecimalField(max_digits=9, decimal_places=6, null=True) 
    longitude = models.DecimalField(max_digits=9, decimal_places=6, null=True) 
    user_id = models.IntegerField(null=True) 

    def __str__(self): 
     return self.id 

class Trip(models.Model): 
    start_location = models.CharField(max_length=255) 
    end_location = models.CharField(max_length=255) 
    miles = models.DecimalField(max_digits=7, decimal_places=2) 
    user = models.ForeignKey(User, on_delete=models.PROTECT) 
    trip_date = models.DateTimeField('trip date') 

    def __str__(self): 
     return self.id 

:私の見解では

class TripsForm(ModelForm): 
    class Meta: 
     model = Trip 
     fields = ['start_location', 'end_location', 'miles', 'trip_date'] 
     widgets = { 
      'start_location': forms.Select(
       attrs={ 
        'class': 'form-control', 
        'id': 'start_location' 
       } 
      ), 
      'end_location': forms.Select(
       attrs={ 
        'class': 'form-control', 
        'id': 'end_location' 
       } 
      ), 
      'miles': forms.NumberInput(
       attrs={ 
        'class': 'form-control', 
        'id': 'miles', 
        'readonly': 'readonly' 
       } 
      ), 
      'trip_date': forms.TextInput(
       attrs={ 
        'class': 'form-control monthpicker datepicker', 
        'id': 'trip_date' 
       } 
      ), 
     } 

私はview.pyからこのようにそれを呼んでいる:

# Create trip 
def trip_create(request): 
    # if this is a POST request we need to process the form data 
    if request.method == 'POST': 
     form = TripsForm(request.POST) 
     # check whether it's valid: 
     if form.is_valid(): 
      # Save the form -- will handle this all later 
      trip.save() 
      return HttpResponseRedirect('/thanks/') 
    # if a GET (or any other method) we'll create a blank form 
    else: 
     form = TripsForm() 
     # Return to trips with list of date 
    return render(request, 'trips/create.html', {'form': form}) 

'start_locations'と 'end_locations'の選択には、すべての場所が挿入される必要があります - curren選択は完全に空です。

私はドキュメントを見てきました:この場合はmodelformset_factory()となるでしょうか?

私は、それらのドロップダウンにデータを入れるために進める方法がわかりません。

+0

確かに、データベースにはいくつかの場所があります。 – FamousJameous

+0

あなたはあなたのview.pyを提供できますか – marin

+0

はい@名人姓 - データベースには約27の場所があります。私はすぐにview.py – Hanny

答えて

1

現在Trip.start_locationTrip.end_locationにはCharFieldを使用しています。選択ウィジェットを使用する場合、選択ウィジェットを作成するのはあなた次第です。

start_locationフィールドとend_locationフィールドにForeignKeyを使用すると、Djangoが選択肢を入力します。

モデルの変更を行ったら、移行してから移行する必要があります。関連する名前がTripに戻っLocationモデルからあなたを取るために使用されているので、私は、related_nametripを含めました

注意。 Mileageモデルのrelated_nameを更新して、mileageを含めることをおすすめします。

+0

好奇心不足 - ドロップダウンは、場所のIDの代わりに '名前'の場所を指定する方法がありますか? – Hanny

+0

[この質問](https://stackoverflow.com/questions/6754776/django-change-select-items-display/6754902#6754902)を参照してください。 – Alasdair

関連する問題