Это был совершенно другой вопрос, но я его редактирую и добавляю совершенно новый, потому что я решил его.Django: присвоение экземпляра модели пользователю
Во всяком случае, у меня есть models.py:
from django.db import models
from django.contrib.auth.models import *
from django.utils.translation import gettext as _
class PLanguages(models.Model):
plangs = models.CharField('Language', max_length=50)
def __unicode__(self):
return self.plangs
class Frameworks(models.Model):
frameworks = models.CharField('Frameworks', max_length=50)
def __unicode__(self):
return self.frameworks
class Projects(models.Model):
name = models.CharField('projectname', max_length=50)
technologies = models.ManyToManyField(PLanguages)
frameworks = models.ManyToManyField(Frameworks)
image = models.ImageField('project_image', upload_to="img/users/projects")
url = models.URLField('url', blank=True)
class UserProfile(models.Model):
user = models.ForeignKey(User, unique=True)
fullname = models.CharField('Full Name', max_length=50)
birthdate = models.DateTimeField('Birthday')
url = models.URLField('Website', blank=True)
company = models.CharField('Company', max_length=50)
CATEGORY_CHOICES = (
('M',_('Male')),
('F',_('Female')),
)
gender = models.CharField('Gender', max_length=200, choices = CATEGORY_CHOICES)
picture = models.ImageField('Picture/Avatar', upload_to='img/users/profile', blank=True)
bio = models.TextField()
projects = models.ManyToManyField(Projects)
#planguages = models.ManyToManyField(PLanguages)
#frameworks = models.ManyToManyField(Frameworks)
, в utils.py:
def get_profile_model():
"""
Return the model class for the currently-active user profile
model, as defined by the ``AUTH_PROFILE_MODULE`` setting. If that
setting is missing, raise
``django.contrib.auth.models.SiteProfileNotAvailable``.
"""
if (not hasattr(settings, 'AUTH_PROFILE_MODULE')) or \
(not settings.AUTH_PROFILE_MODULE):
raise SiteProfileNotAvailable
profile_mod = get_model(*settings.AUTH_PROFILE_MODULE.split('.'))
if profile_mod is None:
raise SiteProfileNotAvailable
return profile_mod
def get_profile_form():
"""
Return a form class (a subclass of the default ``ModelForm``)
suitable for creating/editing instances of the site-specific user
profile model, as defined by the ``AUTH_PROFILE_MODULE``
setting. If that setting is missing, raise
``django.contrib.auth.models.SiteProfileNotAvailable``.
"""
profile_mod = get_profile_model()
class _ProfileForm(forms.ModelForm):
#planguages = forms.ModelMultipleChoiceField(queryset=PLanguages.objects.all(), required=False, widget=forms.CheckboxSelectMultiple)
#frameworks = forms.ModelMultipleChoiceField(queryset=Frameworks.objects.all(), required=False, widget=forms.CheckboxSelectMultiple)
class Meta:
model = profile_mod
exclude = ('user',) # User will be filled in by the view.
return _ProfileForm
def get_project_form():
"""
Return a form class (a subclass of the default ``ModelForm``)
suitable for creating/editing instances of the site-specific user
profile model, as defined by the ``AUTH_PROFILE_MODULE``
setting. If that setting is missing, raise
``django.contrib.auth.models.SiteProfileNotAvailable``.
"""
profile_mod = get_profile_model()
class _ProjectForm(forms.ModelForm):
planguages = forms.ModelMultipleChoiceField(queryset=PLanguages.objects.all(), required=False, widget=forms.CheckboxSelectMultiple)
frameworks = forms.ModelMultipleChoiceField(queryset=Frameworks.objects.all(), required=False, widget=forms.CheckboxSelectMultiple)
class Meta:
model = Projects
exclude = ('user',) # User will be filled in by the view.
return _ProjectForm
, и далее в views.py:
def create_project(request, form_class=None, success_url=None,
template_name='profiles/create_profile.html',
extra_context=None):
#
# We set up success_url here, rather than as the default value for
# the argument. Trying to do it as the argument's default would
# mean evaluating the call to reverse() at the time this module is
# first imported, which introduces a circular dependency: to
# perform the reverse lookup we need access to profiles/urls.py,
# but profiles/urls.py in turn imports this module.
#
if success_url is None:
success_url = reverse('profiles_profile_detail',
kwargs={ 'username': request.user.username })
if form_class is None:
form_class = utils.get_project_form()
if request.method == 'POST':
form = form_class(data=request.POST, files=request.FILES)
if form.is_valid():
profile_obj = form.save(commit=False)
profile_obj.user = request.user
profile_obj.save()
if hasattr(form, 'save_m2m'):
form.save_m2m()
return HttpResponseRedirect(success_url)
else:
form = form_class()
if extra_context is None:
extra_context = {}
context = RequestContext(request)
for key, value in extra_context.items():
context[key] = callable(value) and value() or value
return render_to_response(template_name,
{ 'form': form },
context_instance=context)
create_project = login_required(create_project)
. Теперь я могу создать проект, но проблема в том, что этот проект не назначен пользователю, который его создал, но это просто проект, который не назначен никому. Любые подсказки о том, как назначить его пользователю, который его создает, будут высоко оценены.
«Это был совершенно другой вопрос, но я редактирую его и добавляю совершенно новый, потому что я решил его». - Пожалуйста, не делайте этого, откройте новый вопрос. – cha0site
Извините. Больше не повторю. – Milos