这是一个完全不同的问题,但我正在编辑并添加一个全新的问题,因为我解决了以前的问题。
无论如何,我有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)
。现在,我可以创建一个项目,但问题是该项目没有分配给创建它的用户,但它只是一个项目,而不是分配给任何人。任何有关如何将其分配给创建它的用户的提示都将非常感激。
答案 0 :(得分:2)
通过向user = models.ForeignKey(User, unique=False)
类添加Projects
来修复此问题。唯一的是False
,因为用户可以拥有多个项目。
来自freenode上#django的积分。
答案 1 :(得分:0)
如果您希望打印项目名称,则需要添加
def __unicode__(self):
return self.name
以便显示项目名称。否则它只显示Project对象的repr,这就是你所看到的。