D
D
Dennis2016-06-02 12:56:14
Django
Dennis, 2016-06-02 12:56:14

Django - swears form field when creating an object?

models.py

class Location(models.Model):
        name = models.CharField(max_length=100, verbose_name=u"Локация", default=u'')
        country = models.ForeignKey("Country")
    
    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 %}

When creating a Location object, the Country form field complains:
"Select a valid choice. That choice is not one of the available choices."
Of course, I don’t have any chores, since the idea is that if there is no country in the database, it should be created at the time the Location is created, and if there is (let’s say someone has already created some kind of location with such a country), it should be tied to the Location.
Thank you!

Answer the question

In order to leave comments, you need to log in

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question