DJANGO - View/update; No TwitterModel matches the given query

Viewed 22

I am having trouble updating/viewing my table with models and forms.

I should be able to check my table objects when i go to /twitter/edit/PK but I'm getting error message that is telling me 'No TwitterModel matches the given query.'

This is my models.py

from django.db import models
from django.contrib.auth.models import User
from django.urls import reverse

class TwitterModel(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    Twitter_API_key = models.CharField(max_length=110, default='default')
    Twitter_API_key_secret = models.CharField(max_length=110, default='default')
    Twitter_API_token = models.CharField(max_length=110, default='default')
    Twitter_API_token_secret = models.CharField(max_length=110, default='default')
    
    def __str__(self):
        return self.user.username

This is my forms.py

from django import forms
from .models import TwitterModel

class TwitterUpdateForm(forms.ModelForm):
    
    class Meta:
        model = TwitterModel
        
        fields = ["Twitter_API_key", "Twitter_API_key_secret", "Twitter_API_token", "Twitter_API_token_secret"]

Those are my views.py

from dataclasses import fields
from gc import get_objects
from re import L
from django.shortcuts import render, redirect
from .models import TwitterModel
from .forms import TwitterUpdateForm
from django.contrib.auth.decorators import login_required
from django.contrib import messages
from django.views.generic import (ListView,
                                  DetailView,
                                  CreateView,
                                  UpdateView,
                                  DeleteView)
from django.shortcuts import get_object_or_404

# Create your views here.
@login_required
def twitter(request):
    if request.method == 'POST':
        tw = TwitterUpdateForm(request.POST)
        
        if tw.is_valid:
            obj = tw.save(commit=False)
            obj.user = request.user
            obj.save()
            messages.success(request, f'NICE!')
            return redirect ('twitter')
    else:
        tw = TwitterUpdateForm()
        
    context = {'tw': tw}
    
    return render(request, 'twitter_container/twitter_container.html', context)


def twitter_edit(request, pk=None):
    twitter = get_object_or_404(TwitterModel, pk=pk)
    if request.method == 'POST':
        tw = TwitterUpdateForm(request.POST, instance = twitter)
        if tw.is_valid:
            obj = tw.save(commit=False)
            obj.user = request.user
            obj.save()
            messages.success(request, f'NICE!')
            return redirect ('twitter')
    else:
        tw = TwitterUpdateForm(instance = TwitterModel)
        
    context = {'tw': tw}
    
    return render(request, 'twitter_container/twitter_edit', context)

The first view 'twitter' is working properly but it is posting a new content table for the user everytime, I would love to just update the current one. I can make a signal to automatically create an empty table for TwitterContainer for every registered user.

The second view twitter_edit is trying to get the objects from the table and show them in the html file below.

<h1>Edit Twitter </h1>
<form action="{% url 'twitter_edit' twitter.pk %}" method="post">
    {% csrf_token %}
    {{ tw.as_p }}
    <button class="button" type="submit">Update</button>
</form>

I know it is super complicated but I just want a form associated with the user that is currently logged in. I want to be able to view & update that form, nothing else. At this time, you can register, have a profile, post a blog post, update your profile but I'm unable to proceed with another table associated with the user. I'm really struggling with this last 2-3 days. Additionally, I am completely newbie, if someone decide to assist me in my struggle, please try to explain as to a kid.

Thank you.

0 Answers
Related