Soltys
Soltys

Reputation: 1

Django not saving ModelChoiceField to base

This is my model:

class User(models.Model):
    name = models.CharField(max_length=50)
    mail = models.CharField(max_length=50)
    nickname = models.CharField(max_length=50)
    def __str__ (self):
        return self.name

class Post(models.Model):

    title = models.CharField(max_length=200)
    lead = models.CharField(max_length=10, default='default')
    text = models.TextField()
    created_date = models.DateTimeField(
            default=timezone.now)
    published_date = models.DateTimeField(
            blank=True, null=True)  
    user = models.ForeignKey(User, related_name="User", null=True)

    def publish(self):
        self.published_date = timezone.now()
        self.save()

    def __str__(self):
        return self.title

This is my view:

def post_new(request):
if request.method == "POST":
    form = PostForm(request.POST)
    if form.is_valid():
        post = form.save(commit=False)
        post.published_date = timezone.now()
        post.save()
        return redirect('post_detail', pk=post.pk)
else:
    form = PostForm()
return render(request, 'post_new.html', {'form': form})

This is my forms.py:

class PostForm(forms.ModelForm):
selectuser = forms.ModelChoiceField(queryset=User.objects.all())
class Meta:
    model = Post
    fields = ('title','lead', 'text',)      

class UserForm(forms.ModelForm):

class Meta:
    model = User
    fields = ('name','nickname','mail')

My problem is that selected value from ModelChoiceField is saving to base without value just empty field. Can u help me resolve that problem?

My problem is that selected value from ModelChoiceField is saving to base without value just empty field. Can u help me resolve that problem?

Upvotes: 0

Views: 774

Answers (1)

Alasdair
Alasdair

Reputation: 308829

The model field is Post.user, but your form field PostForm.selectuser. Try using user in the PostForm.

class PostForm(forms.ModelForm):
    user = forms.ModelChoiceField(queryset=User.objects.all())
    ...

Upvotes: 1

Related Questions