(Django) (Проблемы с внешними ключами) model.person_id Не может быть NULL - PullRequest
3 голосов
/ 12 марта 2011

Я знаю, что это кажется слишком заданным вопросом в кругах Джанго, но я боюсь сказать, что я еще не нашел решения для этого.

Моя модель -

from djago.... import User
class InfoPersonal(models.Model):
...
person = models.OneToOneField(User)

Я попытался переопределить save_model () в определении администратора, а также переопределить save () в форме, но, похоже, ничего не работает.

Если бы вы автоматически добавляли данные в столбец ForeignKey или OneToOneField в модель, как бы вы это сделали?

  def profile_creation_personal(request):
    if request.method == 'POST': # If the form has been submitted... 
        form = PersonalForm(request.POST) # A form bound to the POST data 
        # form.person = request.user
        if form.is_valid(): # All validation rules pass 
            # Process the data in form.cleaned_data 
            # ... 
            form.save()
            return HttpResponseRedirect('/done') # Redirect after POST
    else: 
            form = PersonalForm() # An unbound form 
    return render_to_response('info/personal/profile_create.html', { 'form': form,})


class PersonalForm(ModelForm):
    #hometown_id = ModelChoiceField(queryset=InfoReferenceCities.objects.all(),empty_label=None)
    def save(self, *args, **kwargs):
        self.person = request.user
        super(PersonalForm, self).save(*args, **kwargs)
    class Meta:
        model = InfoPersonal
        exclude = ('person',)
        widgets = {'dateofbirth' :  SelectDateWidget()} 

Ответы [ 3 ]

1 голос
/ 12 марта 2011

Я получил ответ !!!Я чувствую себя хорошо!

personal = form.save(commit = False)
personal.person = request.user
personal.save()

Это выглядит так же, как сказал Игнасио, только commit = False - критическое утверждение для сохранения экземпляра без исключения.Спасибо всем, кто помог !!
Ура

0 голосов
/ 12 марта 2011

см.

parent = models.ForeignKey('self', blank=True, null=True, verbose_name=_("parent"))

это нормально, но есть проблема с sqlite, замените его на postgresql, все в порядке. (это для моего кода, измените его на ваш статус)

0 голосов
/ 12 марта 2011

В вашей PersonalForm вы можете создать подкласс для вашей функции save (), поэтому добавляются соответствующие данные, что-то вроде этого:

class PersonalForm(ModelForm):
    def save(self, *args, **kwargs):
        self.person = request.user
        super(PersonalForm, self).save(*args, **kwargs)

    class Meta:
        model = Personal
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...