Как связать модель комментариев с моделью Post в django
Я хочу связать модель комментария с постом, когда несколько постов отображаются на странице, я хочу получить доступ к id поста, который я комментирую, но я не знаю как, пожалуйста, скажите мне, как связать модель комментария Я здесь новичок, поэтому прошу прощения за любые ошибки. Пожалуйста, прокомментируйте, если нужен еще какой-либо код
шаблон :
{% for Img in imgs %}
<div class="container">
<div class="card">
<div class="card-image waves-effect waves-block waves-light">
<img class="activator" src="{{ Img.Post_Img.url }}" alt="image">
</div>
<div class="card-content">
<img src="{{ Img.op.userprofile.Profile_pic.url }}" class="profiles" alt="{{ Img.op.userprofile.Nick_Name }}">
<span class="OP">{{ Img.op.userprofile.Nick_Name }}</span>
<span class="card-title activator white-text text">{{ Img.Title }}<i class="material-icons right">more_vert</i></span>
<p><a href="https://www.youtube.com/watch?v=dQw4w9WgXcQ">Vote</a></p>
</div>
<div class="card-reveal darken-4 black">
<span class="card-title white-text text">{{ Img.Title }}<i class="material-icons right">close</i></span>
<form method="post">
{% csrf_token %}
{{ comment }}
<button class="btn waves-effect waves-light" type="submit" name="action">Submit
<i class="material-icons right">send</i>
</button>
</form>
{% for comment in comments %}
{{ comment.op.userprofile.Nick_Name }}{{ comment.comment }}
{% endfor %}
</div>
</div>
</div>
{% endfor %}
модели :
class MemeImg(models.Model):
Title = models.CharField(max_length=500)
date_created = models.DateTimeField(auto_now_add=True)
op = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, default=1)
Post_Img = CloudinaryField('Post')
def __str__(self):
return self.Title
class Comments(models.Model):
post = models.ForeignKey(MemeImg, on_delete=models.CASCADE)
op = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, default=1)
comment = models.TextField()
date_added = models.DateTimeField(auto_now_add=True)
def __str__(self):
return self.post.Title
просмотров (не работает бросает ошибку not null contraint):
def user_home(request):
func = data(request)
url = func[0]
name = func[1]
comment = CommentSection(request.POST)
if request.method == 'POST':
comment = CommentSection(request.POST)
if comment.is_valid():
comment.save(commit=False)
comment.op = request.user
comment.save()
comments = Comments.objects.all()
imgs = MemeImg.objects.all()
ctx = {
'imgs': imgs,
'url': url,
'name': name,
'comment': comment,
'comments': comments,
}
return render(request, 'User_Home.html', ctx)
Вам необходимо указать null=True
и blank=True
для ForeignKey в модели Comments
, или вы должны установить значение по умолчанию при makemigrations
.
По умолчанию значения None
не допускаются для полей, без явного разрешения, потому что свойство post
модели Comments
по умолчанию установлено на null=False
.
Когда вы создаете комментарий и что-то еще, что вы написали, приводит к comment.post = None
, то Django пытается найти значение по умолчанию. Но вы не указали значение по умолчанию, поэтому Django выдает ошибку, потому что не может найти, чем заполнить поле, в котором должно быть что-то по умолчанию.
Итак, поле post модели Comments
должно выглядеть следующим образом:
post = models.ForeignKey(MemeImg, on_delete=models.CASCADE, null=True, blank=True)