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
开发者_Go百科 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)
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.
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
精彩评论