[英]Autofill foreign key field based on the slug in the URL
我在一個論壇網站上工作,用戶可以在其中選擇他們想要發布的游戲並撰寫帖子。 問題是我不希望用戶從下拉外鍵字段中訪問 select 游戲。 我希望外鍵字段根據 URL 中提供的 slug 自行填充。
models.py 帖子應用程序
class Post(models.Model):
title = models.CharField(max_length=200, blank=True, null=True)
user = models.ForeignKey(User, related_name="posts",on_delete=models.CASCADE)
created_at = models.DateTimeField(auto_now=True)
message = models.TextField()
# need this field automatically filled out
game = models.ForeignKey(Game, related_name="posts",null=True, blank=True,on_delete=models.CASCADE)
slug = models.SlugField(allow_unicode=True, unique=False, null=True, blank=True)
def __str__(self):
return self.title
def save(self, *args, **kwargs):
self.slug = slugify(self.title)
super().save(*args, **kwargs)
def get_absolute_url(self):
return reverse(
"posts:single",
kwargs={
"username": self.user.username,
"pk": self.pk,
"slug": self.game.slug,
}
)
models.py 游戲應用程序
class Game(models.Model):
title = models.CharField(max_length=255)
slug = models.SlugField(allow_unicode=True, unique=True)
def __str__(self):
return self.title
def save(self, *args, **kwargs):
self.slug = slugify(self.title)
super().save(*args, **kwargs)
def get_absolute_url(self):
return reverse("games:single", kwargs={"slug": self.slug})
urls.py 帖子應用程序
urlpatterns = [
path('', views.PostList.as_view(), name="all"),
# need this slug to match the game
path("new/<slug>/", views.CreatePost.as_view(), name="create"),
]
views.py 帖子應用程序
class CreatePost(LoginRequiredMixin, SelectRelatedMixin, generic.CreateView):
fields = ('title','message','game')
model = models.Post
select_related = ('user', 'game')
我猜我需要使用與 url 中提供的相同的 slug 來獲取游戲 object?
我從 slug:game_slug 參數中執行了以下操作,結果是我從 Game (id) 中獲取記錄的 slug。 通過這個id,得到一條來自Post的記錄。 一些數據顯示在頁面上。 注意這里用的是get,必填項必須是一個。
視圖.py
def game(request, game_slug):
pos = Game.objects.get(slug=game_slug).id
aaa = Post.objects.get(game_id=pos)
return HttpResponse(f"""
<p>title: {aaa.title}</p>
<p>user: {aaa.user}</p>
<p>created_at: {aaa.created_at}</p>
""")
網址.py
urlpatterns = [
path('new/<slug:game_slug>/', game, name='game'),
]
http://localhost:8000/new/sport/
並得到如下數據:
post3
user: Tom
created_at: 2022-10-04 14:48:49.576413+00:00
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.