Нужен совет, как лучше реализовать модель статей и файлов на django?
Всем добрый день. Пришел за советом. Как лучше реализовать модели статьи и файлы, где будут одинаковые поля, но файлы будут лишь отличаться тем, что там будет на 2-3 поля больше. Категории те же самые.
Может сделать одну модель, но не заполнять некоторые поля, которые предназначены для файла? Но тут возникает то, что в файлах больше полей - мешать будут.
А фильтровать потом как их отдельно? Скорее только по категориям.
А возможно ли сделать так, чтоб допустим при добавлении с админки, или с сайта, мы могли выбрать будет это файл или статья? И для тех в последствии выводить нужные поля?
Если есть пример такой штуки, скиньте пожалуйста для изучения.
Ответы (1 шт):
Попробуй наследование моделей. Определи базовую модель, в которой будут указаны общие для этих моделей поля. А затем в модели отвечающей за статьи и файлы опиши собственные поля
class BaseModel(models.Model):
field1 = ...
...
class Meta:
abstract = True
class FileModel(BaseModel):
file_field = ...
...
class Article(BaseModel):
article_field = ...
фильтровать сможешь как обычно
Article.objects.filter(...)
FileModel.objects.filter(...)
затем при редактировании, соответственно, сможешь передавать какой-то доп. параметр, который будет отвечать за то, какая именно модель редактируется(либо проверять наличие определенных полей) и тогда подставлять ту форму, которая тебе нужна, например в файле forms.py
class ArticleForm(forms.ModelForm):
class Meta:
model = Article
class FileForm(forms.ModelForm):
class Meta:
model = FileModel
и тогда во view, который отвечает за редактирование
def file_or_article_edit_view(request, object_type='file'):
available_form_classes = {
'file': FileForm,
'article': ArticleForm,
}
form_class = available_form_classes.get[object_type]
form = form_class(request.POST or None)
if request.POST and form.is_valid():
form.save()
return render(request, 'template_name.html', {
'form': 'form',
})