Django Отношение «один ко многим» (комментарий к шутке) - PullRequest
0 голосов
/ 04 мая 2020

думал, что я создам веб-сайт, где люди смогут загружать шутки и комментировать разные, пока что c функционирует.

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

Текущие мысли ...

Используйте это из модели шуток, которую я раздаю в URL, чтобы выбрать шутку и назначить комментарий таким образом (не уверен, как это сделать)

Вот мои модели:

from django.db import models
from django.utils import timezone
from django.urls import reverse

class JokeListItem(models.Model):
    title = models.CharField(max_length=100, null=True)
    content = models.TextField(null=True)
    date_posted = models.DateTimeField(null=True, default=timezone.now)
    comment = models.CharField(max_length=100,null=True)

    def __str__(self):
        return self.title

    def get_absolute_url(self):
        return reverse('joke-home')


class Comment(models.Model):
   content = models.CharField(max_length=100,null=True, blank=True)
   joke = models.ForeignKey(JokeListItem, blank=True, null=True, on_delete=models.CASCADE,related_name='comments')

   def __str__(self):
       return self.content

       def get_absolute_url(self):
        return reverse('joke-home')

Вот мои взгляды:

from django.shortcuts import render
from .models import JokeListItem, Comment
from django.views.generic import CreateView, DeleteView, DetailView, UpdateView
from django.shortcuts import get_object_or_404



# Create your views here.

def home(request):
    all_joke_items = JokeListItem.objects.all()
    return render(request, 'website/home.html', {'jokes': all_joke_items})


class addJoke(CreateView):
    model = JokeListItem
    fields = [
        'title',
        'content',
        'date_posted',
        'content'
    ]


class postDetail(DetailView):
    template_name = 'website/jokelistitem_detail.html'
    model = JokeListItem


class postDeleteJoke(DeleteView):
    model = JokeListItem
    success_url = '/home'


class postUpdateJoke(UpdateView):
    model = JokeListItem
    fields = [
        'title', 'content'
    ]


class postCommentJoke(CreateView):
    template_name = "website/comments_form.html"
    model = Comment
    fields = [
        'content'
    ]

    def form_valid(self, form):
        joke = get_object_or_404(JokeListItem, slug=self.kwargs[''])
        form.instance.joke = joke
        return

Вот мои URL:


jokeweb URL Configuration

The `urlpatterns` list routes URLs to views. For more information please see:
    https://docs.djangoproject.com/en/3.0/topics/http/urls/
Examples:
Function views
    1. Add an import:  from my_app import views
    2. Add a URL to urlpatterns:  path('', views.home, name='home')
Class-based views
    1. Add an import:  from other_app.views import Home
    2. Add a URL to urlpatterns:  path('', Home.as_view(), name='home')
Including another URLconf
    1. Import the include() function: from django.urls import include, path
    2. Add a URL to urlpatterns:  path('blog/', include('blog.urls'))

from django.contrib import admin
from django.urls import path
from website.views import home, addJoke, postUpdateJoke, postDetail, postDeleteJoke, postCommentJoke


urlpatterns = [
    path('admin/', admin.site.urls),
    path('home/', home, name='joke-home'),
    path('new-joke/', addJoke.as_view(), name='joke-create'),
    path('post/<int:pk>/', postDetail.as_view(), name='joke-detail'),
    path('post/<int:pk>/comment/', postCommentJoke.as_view(), name='joke-comment'),
    path('post/<int:pk>/delete/', postDeleteJoke.as_view(), name='joke-delete'),
    path('post/<int:pk>/update/', postUpdateJoke.as_view(), name='joke-update'),

]
...