volkihar
@volkihar

Как сохранить модель, через функцию внутри models.py?

Есть функция, которая во views.py работает нормально:
def save_request_metric(request, result):
    user = None
    if not request.user.is_anonymous:
        user = request.user
    RequestMetric.objects.create(
        ip_address=ip_work.get_client_ip(request),
        user=user,
        request_url=request.get_full_path(),
        request_method=request.method,
        result=result
    )

Модель выглядит так:
class RequestMetric(models.Model):
    user = models.ForeignKey(
        User,  # - это from django.contrib.auth.models import User
        null=True,
        on_delete=models.CASCADE,
        verbose_name='Пользователь',
    )
    request_url = models.CharField(
        max_length=599,
        null=False,
        blank=True,
        verbose_name='Тип запроса'
    )
    request_method = models.CharField(
        max_length=29,
        null=False,
        blank=True,
        verbose_name='Метод запроса'
    )
    time = models.DateTimeField(
        auto_now_add=True,
        null=False,
        verbose_name='Вермя записи'
    )
    ip_address = models.GenericIPAddressField(
        null=True,
        verbose_name='IP адрес'
    )
    result = models.CharField(
        max_length=120,
        null=True,
        blank=False,
        verbose_name='Результат'
    )

Так я пытаюсь сделать функцию внутри модели, чтобы через нее сохранять данные:
def create(self, request, result):
        user = None
        if not request.user.is_anonymous:
            user = request.user
        print(type(user))
        self.ip_address = ip_work.get_client_ip(request),
        self.user = user,
        self.request_url = request.get_full_path(),
        self.request_method = request.method,
        self.result = result
        self.save()

но получаю
ValueError: Cannot assign "(,)": "RequestMetric.user" must be a "User" instance.


Искал в чем проблема, но ничего, чтобы помогло не нашел:
self.user = User.objects.get(pk=user.id), 
#ValueError: Cannot assign "(<User: qqquser>,)": "RequestMetric.user" must be a "User" instance.

self.user = User.objects.get(pk=user),
#TypeError: int() argument must be a string, a bytes-like object or a number, not 'User'

self.user = None,
#ValueError: Cannot assign "(None,)": "RequestMetric.user" must be a "User" instance.

self.user = User.objects.get(user=request.user),
#django.core.exceptions.FieldError: Cannot resolve keyword 'user' into field. Choices are: 'список полей'

self.user_id = user.pk,
#TypeError: int() argument must be a string, a bytes-like object or a number, not 'tuple'


Функции вызываю так:
save_request_metric(request, 'ok') # обычная def функция в том же view из которого идет вызов. Работает прекрасно.

RequestMetric().create( # функция внутри модели 'RequestMetric'
     request=request, result='ok'
)
  • Вопрос задан
  • 683 просмотра
Решения вопроса 1
@Keofaste
Запятые лишние в конце строк
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы