2016-06-01 3 views
1

models.pyジャンゴ - オブジェクト

class Location(models.Model): 
    name = models.CharField(max_length=100, verbose_name=u"Локация", default=u'') 
    country = models.CharField(max_length=100, verbose_name=u"Страна", default=u'') 

class Country(models.Model): 
    name = models.CharField(max_length=50, verbose_name=u"Страна") 

class Photo(models.Model): 
    location = models.ForeignKey(Location, null=True, verbose_name=u'Фото') 
    photo = models.ImageField(upload_to='photos', null=True) 

forms.py

class LocationForm(forms.ModelForm): 

    class Meta: 
     model = Location 
     fields = ['name', 'country'] 


    photos = MultiFileField(min_num=1, max_num=10) 

    def save(self, commit=True): 
     instance = super(LocationForm, self).save(commit) 
     for each in self.cleaned_data['photos']: 
      Photo.objects.create(photo=each, location=instance) 

     return instance 

views.py

class AddLocationPageView(CreateView): 
    model = Location 
    form_class = LocationForm 
    template_name = 'add_location.html' 

class BrowseLocationsPageView(ListView): 
    model = Country 
    context_object_name = 'countries' 
    template_name = "browse_locations.html" 

add_location.html

<form action="" method="POST">{% csrf_token %} 
      {{ form|crispy }} 
      <button class="btn btn-default" type="submit">Add</button> 
</form> 
を繰り返し除外する方法

browse_locations.html

{% for country in countries %} 
      {{ country }} 
{% endfor %} 

私は繰り返すことなく国のbrowse_locations.htmlリストに取得する必要があります。 exapmpleの場合、私は国 'USA'を持つロケーションオブジェクトを作成しています。それから私は国「アメリカ」と2番目のものを作ります。そして私の見解では、2つの「USA」があるリストを見ることができますが、私は1つしか必要ありません。

ありがとうございました!

+0

あなたの最終目標は何ですか?国別にグループ化してサブリストを表示しようとしているのですか、リスト内の別のエントリを取得しようとしていますか? – Sayse

答えて

2

ポストグルを使用している場合は、distinctクエリーセットフィルタをフィールド名とともに使用できます。

class BrowseLocationsPageView(ListView): 
    def get_queryset(self): 
     return self.model.objects.distinct('name') 

これは、「問題」を解決しますが、手に大きな問題があります。国を作成しているところでは、同じ名前の既存の国があるかどうかを調べるのではなく、新しい国を作成しています。get_or_createが便利です。

場所は、おそらくあなたは場所のモデルにCharFieldですとして国を持っている...

+0

私はその問題が同じ国に再び起こっていることを知っていましたが、私は解決策を見つけることができず、(別個の選択を通じて)この問題を回避することに決めました。私はこのget_or_createメソッドをどこに適用するべきか教えてください。フォームのsave()やフォームのform_valid()の中で?ありがとう! – Dennis

+0

@Dennis - 実際に決定を下すには十分な情報がありません。すでに存在する国を作成しようとしている場合はフォームを無効にしたいと思うかもしれません。この質問の範囲 – Sayse

+1

ok ..ありがとう..私はあなたのアドバイスを持っていることを理解しようとします。 – Dennis

0

あまりにも国への外部キーを持つ必要があります。したがって、反逆。

ロケーションモデルの国番号フィールドをForeignKeyとして変更

+0

私は試してみました..この場合、私のフィールドに(ビュー内の)フォームにそのようなエラーはありません選択 – Dennis

関連する問題