tags:

views:

69

answers:

2

this is the code:

def create(request, form_class=MapForm, template_name="maps/create.html"):
    map_form = form_class(request.POST or None)

    if map_form.is_valid():
        map = map_form.save(commit=False)

and the map_form is :

class MapForm(forms.ModelForm):

    slug = forms.SlugField(max_length=20,
        help_text = _("a short version of the name consisting only of letters, numbers, underscores and hyphens."),
        #error_message = _("This value must contain only letters, numbers, underscores and hyphens."))
        )

    def clean_slug(self):
        if Map.objects.filter(slug__iexact=self.cleaned_data["slug"]).count() > 0:
            raise forms.ValidationError(_("A Map already exists with that slug."))
        return self.cleaned_data["slug"].lower()

    def clean_name(self):
        if Map.objects.filter(name__iexact=self.cleaned_data["name"]).count() > 0:
            raise forms.ValidationError(_("A Map already exists with that name."))
        return self.cleaned_data["name"]

    class Meta:
        model = Map
        fields = ('name', 'slug', 'description')

and i want to know : what is the 'map' used for ?

updated:

what is the 'map.members' mean ???

map.members.add(request.user)
+2  A: 

I am not sure which map you exactly mean, but if it is this:

 map = map_form.save(commit=False)

then it is just a variable called map that holds an instance of the Map model/class. Whenever you save a model form, you get an instance of the respective model back.
By using commit=False you explicitly say that this instance should not be saved into the database (now). This is mostly used to do something else with the model before you save it into the database. To refer to your question: The current user is related to the newly created map instance. As this has to be done in the view (to access the request that contains the user), the instance is not saved at first, the user is added, then the instance is saved.
So if you want to save this instance you have to call the save() method on this instance manually:

map = map_form.save(commit=False) # create instance from form data (validated)

if some_condition_is_met:
    map.property = set_a_certain_value

map.members.add(request.user) #relate current user to map
map.save() # now save the model to the database

But I would not name the variable map as Python has a builtin function named map(). If you try to call this function later in your code, it would probably raise a TypeError as you are overriding the functions name with an instance of some object.

Read more about model forms.

Felix Kling
hi Felix ,look the updated.
zjm1126
@zjm1126: I can't find this in your original code but this is exactly what I mean with `This is mostly used to do something else with the model before you save it into the database.` IN this case, the user is added to a relation of the `map` object.
Felix Kling
A: 

Not related to your post necessarily, but you should know that map is a function name in the python standard library. http://docs.python.org/library/functions.html#map

Justin Lilly