Запустить две программы, в одном будет django проект с сайтом, на втором будет сидеть парсер, который будет получать данные и записывать их в бд. А сайт будет выгружать из бд и показывать их у себя. Но это придется запускать две консоли одновременно.
# Example model
class Category(models.Model):
parent = models.ForeignKey('Category',
on_delete=models.CASCADE,
verbose_name=_('Parent'),
related_name='children',
blank=True,
null=True)
title = models.CharField(_('Title'), max_length=64, unique=True)
slug = models.SlugField(max_length=50)
objects = CategoryManager()
# Manager with method to build tree using directed graph
class CategoryManager(models.Manager):
def _traverse(self, hierarchy, graph, items):
for item in items:
hierarchy.append(item)
hierarchy.append(self._traverse([], graph, graph[item.title]))
return hierarchy
def as_tree(self):
"""Returns FK hierarchy in form of nested lists."""
qs = super().get_queryset().exclude(
title='Unassigned'
).select_related('parent')
roots = []
children = []
for item in qs:
roots.append(item) if item.parent is None else children.append(item)
graph = {item.title: set() for item in qs}
sorted_children = sorted(children, key=lambda x: x.parent.title)
grouped = groupby(children, key=lambda x: x.parent.title)
for title, group in grouped:
graph[title].update(group)
return self._traverse([], graph, roots)
# To render in template in form of simple nested unordered list use built-in filter:
# https://docs.djangoproject.com/en/dev/ref/templates/builtins/#unordered-list
{{ tree|unordered_lsit }}
К сожалению не помогло, ошибка та же:
class EventGETSerializer(serializers.ModelSerializer):
place = PlaceSerializer(read_only=True)
class Meta:
model = Event
fields = ('id', 'title', 'description', 'price', 'place', 'link', 'date', 'time')
class EventSerializer(serializers.ModelSerializer):
class Meta:
model = Event
fields = ('id', 'title', 'description', 'price', 'place', 'link', 'date', 'time')
from rest_framework import permissions
class EventList(generics.ListCreateAPIView):
queryset = Event.objects.all()
def get_serializer_class(self):
if self.request.method in permissions.SAFE_METHODS:
return EventGETSerializer
else:
return EventSerializer
from rest_framework.permissions import SAFE_METHODS
class EventSerializer(serializers.ModelSerializer):
def __init__(self, *args, **kwargs):
request = kwargs.get('context', {}).get('request')
if request is not None and request.method not in SAFE_METHODS:
self.Meta.depth = 0
else:
self.Meta.depth = 1
super().__init__(*args, **kwargs)
class Meta:
model = Event
fields = ('id', 'title', 'description', 'price', 'place', 'link',
'date', 'time')
к тому же delete_model как и save нельзя использовать для блокирования удаления объекта, только для добавления действий до и после удаления.
from django.contrib import messages
def delete_model(self, request, obj):
"""Если какая-то проверка успешна - удалить объект, если нет, то показать сообщение об ошибке."""
if check_permission(obj):
return super().delete_model(request, obj)
# При следующем запросе захватываем только ошибки.
# Так после нажатия на кнопку удаления не будет захвачено ложное сообщение
# об успешном удалении.
messages.set_level(request, messages.ERROR)
message = "You cant delete this!"
# Посылаем свое сообщение об ошибке.
self.message_user(request, message, level=messages.ERROR)
table = [
['header1', 'header2', 'header3', 'header4'],
['value1.1', 'value2.1', 'value3.1', 'value4.1'],
['value1.2', 'value2.2', 'value3.2', 'value4.2']
]
table = [('header1', 'header2', 'header3', 'header4')]
table += Model.objects.all().values_list('value1', 'value2', 'value3', 'value4')
context['table'] = table
<table>
{% for v1, v2, v3, v4 in table %}
{% if forloop.first %}
<tr>
<th>{{ v1 }}</th>
<th>{{ v2 }}</th>
<th>{{ v3 }}</th>
<th>{{ v4 }}</th>
</tr>
{% else %}
<tr>
<td>{{ v1 }}</td>
<td>{{ v2 }}</td>
<td>{{ v3 }}</td>
<td>{{ v4 }}</td>
</tr>
{% endif %}
{% endfor %}
</table>
function drawChart(chartData, lineChartId) {
var data = new google.visualization.DataTable();
data.addColumn('date', 'Time of Day');
data.addColumn('number', 'KWR');
data.addColumn('number', 'BSR');
data.addRows(chartData);
var options = {
colors: ['#000000','#ff9000'],
hAxis: {
format: 'M/d/yy',
gridlines: {count: 10}
},
vAxis: {
direction: -1
}
};
var chart = new google.visualization.LineChart(document.getElementById(lineChartId));
chart.draw(data, options);
}
def table_view(request):
data = {'2A':
['Name', 'State',
'Name2', 'State2',
'Name3', 'State3',
'Name4', 'State4',
'Name5', 'State5']
}
data['2A'] = [data['2A'][i:i+2] for i in range(0, len(data['2A']), 2)]
return render(request, 'app/template.html', {'students_data': data})
{% for student in data %}
<tr>
<input type="hidden" name="stud" value="{{ student.0 }}" />
<td>{{student.0 }}</td>
<input type="hidden" name="state" value="" class="state"/>
<td id="editable">{{ student.1 }}</td>
</tr>
{% endfor %}
article = Article.objects.get(pk=instance.pk)
@receiver(pre_save, sender=Article)
def delete_old_article_image(sender, instance, *args, **kwargs):
if instance.pk:
try:
article = Article.objects.get(pk=instance.pk)
if instance.image and article.image != instance.image:
slide.image.delete(False)
except Article.DoesNotExist:
pass
first_article = Article.objects.create(
# pk=150,
...
)
second_article = Article.objects.create(
# pk=160,
...
)
third_article = Article.objects.create(
# pk=170,
...
)
data = {first_article.pk: 2, second_article.pk: 0, third_article.pk: 1}
@receiver(pre_save, sender=Article)
def delete_old_article_image(sender, instance, *args, **kwargs):
if instance.pk is not None:
article = Article.objects.get(pk=instance.pk)
if instance.image and article.image != instance.image:
slide.image.delete(False)
from django.db.models import Q
def find_user_by_name(query_name):
qs = User.objects.all()
for term in query_name.split():
qs = qs.filter( Q(first_name__icontains = term) | Q(last_name__icontains = term))
return qs
def __str__(self):
return self.as_div()
# остальные импорты опущены
from django.conf import settings
class Article(models.Model):
...
added_by = models.ForeignKey(settings.AUTH_USER_MODEL, blank=True, null=True,
related_name="articles_added")
last_edited_by = models.ForeignKey(settings.AUTH_USER_MODEL, blank=True, null=True,
related_name="articles_edited")
...
from django.contrib import admin
from .models import Article
class ArticleAdmin(admin.ModelAdmin):
readonly_fields = ("last_edited_by",) # делаем полем рид онли, чтобы нельзя было его отредактировать
def save_model(self, request, obj, form, change):
if change: # True если изменяется уже существующий объект, False если добавляется новый
# определяем и записываем пользователя если изменяется существующий объект
obj.last_edited_by = request.user
else:
# определяем и записываем пользователя если добавляется новый объект
obj.added_by = request.user
super(ArticleAdmin, self).save_model(request, obj, form, change)
admin.site.register(Article, ArticleAdmin)