Django-如何排除重复对象

Django-如何排除重复对象,django,Django,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 = mod

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查看国家/地区列表,不要重复。 例如,我正在使用国家“USA”创建位置对象。然后我用国家“美国”创建第二个。在我看来,我可以看到列表中有两个“美国”,但我只需要一个


谢谢

如果您使用的是postgres,那么您可以使用带有字段名的queryset过滤器

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

这解决了“问题”,但还有一个更大的问题。无论您在哪里创建国家,您都在创建新的国家,而不是查看是否存在同名的现有国家,这在这里可能很有用


Location可能也应该有一个国家/地区的外键…

在Location模型中将country作为CharField。因此,重新定位


在位置模型中将国家/地区字段更改为外键

您的最终目标是什么?您是想通过按国家分组来显示子列表,还是想在列表中获得不同的条目?我已经尝试了。。在这种情况下,我在我的领域中有一个错误,即没有这样的选择。我知道问题再次出现在同一个国家,但我找不到解决方案,并决定解决这个问题(通过不同的选择)。请告诉我应该在哪里应用这个get\u或\u create方法?。。在表单中的save()中还是在视图中的表单_valid()中?谢谢@丹尼斯-这里没有足够的信息来真正做出决定,如果你试图创建一个已经存在的国家,很难说,不管怎样,它都超出了这个问题的范围,那么你可能想使表格无效
class BrowseLocationsPageView(ListView):
    def get_queryset(self):
        return self.model.objects.distinct('name')